C#读取二代身份证信息源码.docx
- 文档编号:29587916
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:44
- 大小:29.47KB
C#读取二代身份证信息源码.docx
《C#读取二代身份证信息源码.docx》由会员分享,可在线阅读,更多相关《C#读取二代身份证信息源码.docx(44页珍藏版)》请在冰豆网上搜索。
C#读取二代身份证信息源码
C#读取二代身份证信息源码
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Runtime.InteropServices;
usingSystem.Reflection;
usingSystem.IO;
namespaceICCard
{
publicclassclsICCard
{
//首先,声明通用接口
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_OpenPort(intiPortID);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ClosePort(intiPortID);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_PowerManagerBegin(intiPortID,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_AddSAMUser(intiPortID,stringpcUserName,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_SAMLogin(intiPortID,stringpcUserName,stringpcPasswd,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_SAMLogout(intiPortID,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_UserManagerOK(intiPortID,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ChangeOwnPwd(intiPortID,stringpcOldPasswd,stringpcNewPasswd,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ChangeOtherPwd(intiPortID,stringpcUserName,stringpcNewPasswd,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_DeleteSAMUser(intiPortID,stringpcUserName,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_StartFindIDCard(intiPortID,refintpucIIN,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_SelectIDCard(intiPortID,refintpucSN,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ReadBaseMsg(intiPortID,stringpucCHMsg,refintpuiCHMsgLen,stringpucPHMsg,refintpuiPHMsgLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ReadBaseMsgToFile(intiPortID,stringfileName1,refintpuiCHMsgLen,stringfileName2,refintpuiPHMsgLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_WriteAppMsg(intiPortID,refbytepucSendData,intuiSendLen,refbytepucRecvData,refintpuiRecvLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_WriteAppMsgOK(intiPortID,refbytepucData,intuiLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_CancelWriteAppMsg(intiPortID,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ReadNewAppMsg(intiPortID,refbytepucAppMsg,refintpuiAppMsgLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ReadAllAppMsg(intiPortID,refbytepucAppMsg,refintpuiAppMsgLen,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_UsableAppMsg(intiPortID,refbyteucByte,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_GetUnlockMsg(intiPortID,refbytestrMsg,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_GetSAMID(intiPortID,refbyteStrSAMID,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_SetMaxRFByte(intiPortID,byteucByte,intiIfOpen);
[DllImport(‘sdtapi.dll‘)]
publicstaticexternintSDT_ResetSAM(intiPortID,intiIfOpen);
[DllImport(‘WltRS.dll‘)] publicstaticexternintGetBmp(stringfile_name,intintf); publicdelegatevoidDe_ReadICCardComplete(clsEDZobjEDZ); publiceventDe_ReadICCardCompleteReadICCardComplete; privateclsEDZobjEDZ=newclsEDZ(); privateintEdziIfOpen=1; //自动开关串口 intEdziPortID; publicclsICCard() { } publicboolReadICCard() { boolbUsbPort=false; intintOpenPortRtn=0; intrtnTemp=0; intpucIIN=0; intpucSN=0; intpuiCHMsgLen=0; intpuiPHMsgLen=0; objEDZ=newclsEDZ(); //检测usb口的机具连接,必须先检测usb for(intiPort=1001;iPort<=1016;iPort++) { intOpenPortRtn=SDT_OpenPort(iPort); if(intOpenPortRtn==144) { EdziPortID=iPort; bUsbPort=true; break; } } //检测串口的机具连接 if(! bUsbPort) { for(intiPort=1;iPort<=2;iPort++) { intOpenPortRtn=SDT_OpenPort(iPort); if(intOpenPortRtn==144) { EdziPortID=iPort; bUsbPort=false; break; } } } if(intOpenPortRtn! =144) { MessageBox.Show(‘端口打开失败,请检测相应的端口或者重新连接读卡器! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } //在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把EdziPortID保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是, //您要考虑机具连接端口被用户改变的情况哦 //下面找卡 rtnTemp=SDT_StartFindIDCard(EdziPortID,refpucIIN,EdziIfOpen); if(rtnTemp! =159) { rtnTemp=SDT_StartFindIDCard(EdziPortID,refpucIIN,EdziIfOpen); //再找卡 if(rtnTemp! =159) { rtnTemp=SDT_ClosePort(EdziPortID); MessageBox.Show(‘未放卡或者卡未放好,请重新放卡! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } } //选卡 rtnTemp=SDT_SelectIDCard(EdziPortID,refpucSN,EdziIfOpen); if(rtnTemp! =144) { rtnTemp=SDT_SelectIDCard(EdziPortID,refpucSN,EdziIfOpen); //再选卡 if(rtnTemp! =144) { rtnTemp=SDT_ClosePort(EdziPortID); MessageBox.Show(‘读卡失败! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } } //注意,在这里,用户必须有应用程序当前目录的读写权限//检测串口的机具连接 if(! bUsbPort) { for(intiPort=1;iPort<=2;iPort++) { intOpenPortRtn=SDT_OpenPort(iPort); if(intOpenPortRtn==144) { EdziPortID=iPort; bUsbPort=false; break; } } } if(intOpenPortRtn! =144) { MessageBox.Show(‘端口打开失败,请检测相应的端口或者重新连接读卡器! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } //在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把EdziPortID保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是, //您要考虑机具连接端口被用户改变的情况哦 //下面找卡 rtnTemp=SDT_StartFindIDCard(EdziPortID,refpucIIN,EdziIfOpen); //www.bird- if(rtnTemp! =159) { rtnTemp=SDT_StartFindIDCard(EdziPortID,refpucIIN,EdziIfOpen); //再找卡 if(rtnTemp! =159) { rtnTemp=SDT_ClosePort(EdziPortID); MessageBox.Show(‘未放卡或者卡未放好,请重新放卡! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } } //选卡 rtnTemp=SDT_SelectIDCard(EdziPortID,refpucSN,EdziIfOpen); if(rtnTemp! =144) { rtnTemp=SDT_SelectIDCard(EdziPortID,refpucSN,EdziIfOpen); //再选卡 if(rtnTemp! =144) { rtnTemp=SDT_ClosePort(EdziPortID); MessageBox.Show(‘读卡失败! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } } //注意,在这里,用户必须有应用程序当前目录的读写权限 FileInfoobjFile=newFileInfo(‘wz.txt‘); if(objFile.Exists) { objFile.Attributes=FileAttributes.Normal; objFile.Delete(); } objFile=newFileInfo(‘zp.bmp‘); if(objFile.Exists) { objFile.Attributes=FileAttributes.Normal; objFile.Delete(); } objFile=newFileInfo(‘zp.wlt‘); if(objFile.Exists) { objFile.Attributes=FileAttributes.Normal; objFile.Delete(); } rtnTemp=SDT_ReadBaseMsgToFile(EdziPortID,‘wz.txt‘,refpuiCHMsgLen,‘zp.wlt‘,refpuiPHMsgLen,EdziIfOpen); if(rtnTemp! =144) { rtnTemp=SDT_ClosePort(EdziPortID); MessageBox.Show(‘读卡失败! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } //下面解析照片,注意,如果在C盘根目录下没有机具厂商的授权文件Termb.Lic,照片解析将会失败 if(bUsbPort) rtnTemp=GetBmp(‘zp.wlt‘,2); else rtnTemp=GetBmp(‘zp.wlt‘,1); switch(rtnTemp) { case0: MessageBox.Show(‘调用sdtapi.dll错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case1: //正常 break; case-1: MessageBox.Show(‘相片解码错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case-2: MessageBox.Show(‘wlt文件后缀错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case-3: MessageBox.Show(‘wlt文件打开错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case-4: MessageBox.Show(‘wlt文件格式错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case-5: MessageBox.Show(‘软件未授权! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; case-6: MessageBox.Show(‘设备连接错误! ‘,‘提示‘,MessageBoxButtons.OK,MessageBoxIcon.Error); break; } rtnTemp=SDT_ClosePort(EdziPortID); FileInfof=newFileInfo(‘wz.txt‘); FileStreamfs=f.OpenRead(); byte[]bt=newbyte[fs.Length]; fs.Read(bt,0,(int)fs.Length); fs.Close(); stringstr=System.Text.UnicodeEncoding.Unicode.GetString(bt); objEDZ.Name=System.Text.UnicodeEncoding.Unicode.GetString(bt,0,30).Trim(); objEDZ.Sex_Code=System.Text.UnicodeEncoding.Unicode.GetString(bt,30,2).Trim(); objEDZ.NATION_Code=System.Text.UnicodeEncoding.Unicode.GetString(bt,32,4).Trim();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 读取 二代 身份证 信息 源码