中控考勤機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的品質:
程式設計風格很嚴謹,代碼注釋很詳細。贊!