天天看點

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

中控考勤機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的品質:

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