中控考勤機SDK使用中員工姓名的處理( c# )


公司使用的考勤機是中控的指紋考勤機,但是中控的型號亂七八糟,通過程序讀出來的型號和實際標的型號不一致。

另外,提供的開發包的C#版本的Demo中調用

 axCZKEM1.ReadAllUserID(iMachineNumber);

后調用

axCZKEM1.SSR_GetAllUserInfo(iMachineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled)

來獲取所有用戶信息時,返回的sName(雇員姓名)每次總是在后面多幾個字節,雖然顯示到Demo中的ListView中時,windows自動屏蔽了亂碼,但是程序處理時依然會出現亂碼。

用下面的方法可以解決此問題,並能從sName中解析出正確的雇員姓名。

 //處理名字中多余的字符
                //utf8編碼后的字節數組長度,名字中漢字的個數=(byte[]長度-10)/6+2
                //提取漢字=字節數組的0開始,到名字中漢字的個數*3
                if (null != sName)
                {
                    
                    byte[] nameBytes = System.Text.Encoding.UTF8.GetBytes(sName);
                    if (nameBytes.Length >= 10)
                    {
                        int nameLength = (nameBytes.Length - 10) / 6 + 2;
                        sName = System.Text.Encoding.UTF8.GetString(nameBytes, 0, 3 * nameLength);
                    }
                    /*
                    switch (nameBytes.Length)
                    {
                        case 22:
                            sName = System.Text.Encoding.UTF8.GetString(nameBytes, 0, 12);
                            break;
                        case 16:
                            sName = System.Text.Encoding.UTF8.GetString(nameBytes, 0, 9);
                            break;
                        case 10:
                            sName = System.Text.Encoding.UTF8.GetString(nameBytes, 0, 6);
                            break;
                        default:
                            sName = getChinese(sName);
                            break;
                    }
                   */
                }
                else
                {
                    sName = "null";
                }

 

順便吐槽下中控的考勤機的SDK:

無法獲取指定時間內的考勤數據,必須每次都全量下載。

順便贊一下Demo的質量:

編程風格很嚴謹,代碼注釋很詳細。贊!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM