公司使用的考勤機是中控的指紋考勤機,但是中控的型號亂七八糟,通過程序讀出來的型號和實際標的型號不一致。
另外,提供的開發包的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的質量:
編程風格很嚴謹,代碼注釋很詳細。贊!