公司使用的考勤机是中控的指纹考勤机,但是中控的型号乱七八糟,通过程序读出来的型号和实际标的型号不一致。

另外,提供的开发包的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 >= )
{
int nameLength = (nameBytes.Length - ) / + ;
sName = System.Text.Encoding.UTF8.GetString(nameBytes, , * 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的质量:

编程风格很严谨,代码注释很详细。赞!

中控考勤机SDK使用中员工姓名的处理( c# )的更多相关文章

  1. 中控考勤机使用 zkemkeeper SDK订阅考勤数据事件失效解决方式

    问题 前同事编写的对中控考勤机数据集成项目当中,打卡数据不能实时进行上传到平台当中,一直靠定时全量上传来同步数据. 阅读代码后,发现代码中有实时上传数据的逻辑,但是运行一段时间后,中控zkemkeep ...

  2. 通达OA 同步中控考勤机 增强版

    如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...

  3. oracle中plsql练习题-----编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号

    一.思路:首先输出需要变量接收,需要声明变量,于是考虑什么变量类型比较合适,在这我用的是table类型,最后,查询出来,循环输出即可. 二.具体实现 -- 编写一个PL/SQL块,输出所有员工的员工姓 ...

  4. Java初学者作业——编写JAVA程序,在控制台中输入六位员工的姓名,通过随机点名方式,输出当选组长的员工姓名。

    返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台中输入六位员工的姓名,通过随机点名方式,输出当选组长的员工姓名. 实现思路: (1)定义字符串类型的数组names,长度为6,用于存储六 ...

  5. oracle中plsql练习题----查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。 – –如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。 – –如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。

    一.思路:首先判断这个查询的是emp表,需要接收值,声明一个rowtype类型接收数据即可,第二是,存在exception,需要处理,exception中有两种异常,分别处理即可,分别输出即可. 二. ...

  6. 中控考勤机-C#操作

    引用:Interop.zkemkeeper.dll 实例化: public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM(); 首先从数据库中获取考 ...

  7. 中控考勤机WEB主动上报接收SERVER程序

    using System; using System.IO; using System.Net; using System.Text.RegularExpressions; namespace Con ...

  8. Ajax提交数据判断员工编号是否存在,及自动填充与员工编号所对应的员工姓名。

    JSP页面中所需要的JavaScript事件及Ajax <script type="text/javascript"> function checkEmpNo(id){ ...

  9. 如何用分析函数找出EMP表中每个部门工资最高的员工

    EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...

随机推荐

  1. 转:NGNIX模块开发——nginx的配置系统

    From:http://tengine.taobao.org/book/chapter_02.html nginx的配置系统 nginx的配置系统由一个主配置文件和其他一些辅助的配置文件构成.这些配置 ...

  2. 持续集成篇_08_Hudson持续集成服务器的使用(自动化编译、分析、打包、部署)

    持续集成篇_08_Hudson持续集成服务器的使用(自动化编译.分析.打包.部署) 1.创建任务 svn用户验证 验证通过 *****五颗*表示每分钟检查svn路径是否有变更,有变更就会重新构建,相当 ...

  3. Max SPA

    Stingray Response_ContentType Stingray javascript 其实是支持返回原生html的, 有了这个事情就简单了 RHTML - Response_Conten ...

  4. POJ 1548 Robots(最小路径覆盖)

    POJ 1548 Robots 题目链接 题意:乍一看还以为是小白上那题dp,事实上不是,就是求一共几个机器人能够覆盖全部路径 思路:最小路径覆盖问题.一个点假设在还有一个点右下方,就建边.然后跑最小 ...

  5. DWR组件——基于远程过程调用实现Ajax

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html  一:DWR的用途 DWR(Direct Web Remoting)是一个Web远程调用 ...

  6. Selenium如何支持测试Windows application

    很长一段时间大家都支持Selenium是只支持测试Web应用程序的. 纵观Selenium的成长历程,不难解释这个原因.Selenium开始的时候是作为一个Firefox中的插件出现的,而且做得是纯J ...

  7. VS2017自带VS2015编译器等在命令行下无法使用问题

    1.起因 早前把VS2015卸了,安装了VS2017.因为VS2017安装的时候可以选择安装VS2015编译套件,也就安装了.使用上一直没有什么问题,所以也没有注意到这个细节. 后来使用cmake生成 ...

  8. appium界面运行过程(结合日志截图分析)

    appium界面运行过程: 1.启动一个http服务器:127.0.0.1:47232.根据测试代码setUp()进行初始化,在http服务器上建立一个session对象3.开始调用adb,找到连接上 ...

  9. 使用std::find_if提取序列容器的子串

    一个需求是这样的,一个vector容器中,我需要提取满足一定条件的元素的序列.就比如,一个树形结构,我把该接口拍扁成vector容器,每个节点都有一个惟一ID. 以下就是根据特定的ID查找节点下的子节 ...

  10. 一颗可靠的时间胶囊:苹果AirPort Time Capsule测评

    http://sspai.com/24181/ 如何从 Time Machine 备份恢复数据? AirPort Time Capsule能轻松完成备份,自然也少不了方便地恢复备份.一般常见的恢复备份 ...