码迷,mamicode.com
首页 > 其他好文 > 详细

不同机具的通用的第二代居民身份证读写

时间:2015-03-04 18:16:56      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

原文:不同机具的通用的第二代居民身份证读写

    公安部已经大规模在全国范围内推广第二代居民身份证的换发工作,目前,许多地区二代证换发工作已经进行了很久。但是,相对应于二代证的推广,社会上许许多多的应用系统都还没有对二代证读卡开发相应的接口,为此,我写了一个通用的二代证机具读卡类,希望能对各位在各自的系统中开发这样的接口提供帮助。
    本类仅仅提供读卡的用法,写卡的方式我并没有写在里面,但是,相应的写调用我已经声明在里面,希望各位大侠能独自研究应用。技术分享
    该类接口具有如下特点:
    1、通用于目前市场上各个机具厂商的二代证读(写)机具。(想想,为不同厂商开发不同的接口确实令人头疼的,且由于接口不兼容,容易被客户骂死!技术分享
    2、自动适应串口、USB口的各种机具
    3、能读文字信息,但是,要想正确读照片,必须需要机具厂商的授权文件Termb.Lic,且授权文件必须放在C盘根目录下。(我总不能不照顾机具厂商的利益吧技术分享
    4、除了上面第三条之外,您甚至不用安装机具的驱动程序,接上二代证机具即可使用。
    
    废话少说,下面看实现方法:

技术分享using System;
技术分享
using System.Drawing;
技术分享
using System.Collections;
技术分享
using System.ComponentModel;
技术分享
using System.Windows.Forms;
技术分享
using System.Runtime.InteropServices;
技术分享
using System.Reflection ;
技术分享
using System.IO;
技术分享
技术分享
技术分享
namespace ICCard
技术分享
{
技术分享    
public class clsICCard
技术分享    
{
技术分享        
//首先,声明通用接口
技术分享
        [DllImport("sdtapi.dll")]
技术分享        
public static extern int SDT_OpenPort(int iPortID);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ClosePort(int iPortID);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_PowerManagerBegin(int iPortID, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_AddSAMUser(int iPortID, string pcUserName, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_SAMLogin(int iPortID, string pcUserName, string pcPasswd, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_SAMLogout(int iPortID, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_UserManagerOK(int iPortID, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ChangeOwnPwd(int iPortID, string pcOldPasswd, string pcNewPasswd, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ChangeOtherPwd(int iPortID, string pcUserName, string pcNewPasswd, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_DeleteSAMUser(int iPortID, string pcUserName, int iIfOpen);
技术分享
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_StartFindIDCard(int iPortID, ref int pucIIN, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_SelectIDCard(int iPortID, ref int pucSN, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ReadBaseMsg(int iPortID, string pucCHMsg, ref int puiCHMsgLen, string pucPHMsg, ref int puiPHMsgLen, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ReadBaseMsgToFile(int iPortID, string fileName1, ref int puiCHMsgLen, string fileName2, ref int puiPHMsgLen, int iIfOpen);
技术分享
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_WriteAppMsg(int iPortID, ref byte pucSendData, int uiSendLen, ref byte pucRecvData, ref int puiRecvLen, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_WriteAppMsgOK(int iPortID, ref byte pucData, int uiLen, int iIfOpen);
技术分享
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_CancelWriteAppMsg(int iPortID, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ReadNewAppMsg(int iPortID, ref byte pucAppMsg, ref int puiAppMsgLen, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ReadAllAppMsg(int iPortID, ref byte pucAppMsg, ref int puiAppMsgLen, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_UsableAppMsg(int iPortID, ref byte ucByte, int iIfOpen);
技术分享
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_GetUnlockMsg(int iPortID, ref byte strMsg, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_GetSAMID(int iPortID, ref byte StrSAMID, int iIfOpen);
技术分享
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_SetMaxRFByte(int iPortID, byte ucByte, int iIfOpen);
技术分享        [DllImport(
"sdtapi.dll")]
技术分享        
public static extern int SDT_ResetSAM(int iPortID, int iIfOpen);
技术分享
技术分享        [DllImport(
"WltRS.dll")]
技术分享        
public static extern int GetBmp(string file_name, int intf);
技术分享
技术分享        
public delegate void De_ReadICCardComplete(clsEDZ objEDZ);
技术分享        
public event De_ReadICCardComplete ReadICCardComplete;
技术分享        
private clsEDZ objEDZ = new clsEDZ();
技术分享        
private int EdziIfOpen = 1;               //自动开关串口
技术分享
        int EdziPortID;        
技术分享        
public clsICCard()
技术分享        
{
技术分享
技术分享        }

技术分享        
public bool ReadICCard()
技术分享        
{           
技术分享            
bool bUsbPort = false;
技术分享            
int intOpenPortRtn = 0;
技术分享            
int rtnTemp = 0;
技术分享            
int pucIIN = 0;
技术分享            
int pucSN = 0;
技术分享            
int puiCHMsgLen = 0;
技术分享            
int puiPHMsgLen = 0;
技术分享
技术分享            objEDZ 
= new clsEDZ();
技术分享            
//检测usb口的机具连接,必须先检测usb
技术分享
            for (int iPort = 1001; iPort <= 1016; iPort++)
技术分享            
{
技术分享                intOpenPortRtn 
= SDT_OpenPort(iPort);
技术分享                
if (intOpenPortRtn == 144)
技术分享                
{
技术分享                    EdziPortID 
= iPort;
技术分享                    bUsbPort 
= true;
技术分享                    
break;
技术分享                }

技术分享            }

技术分享            
//检测串口的机具连接
技术分享
            if (!bUsbPort)
技术分享            
{
技术分享                
for (int iPort = 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);
技术分享                
return false;
技术分享            }

技术分享            
//在这里,如果您想下一次不用再耗费检查端口的检查的过程,您可以把 EdziPortID 保存下来,可以保存在注册表中,也可以保存在配置文件中,我就不多写了,但是,
技术分享            
//您要考虑机具连接端口被用户改变的情况哦
技术分享
技术分享            
//下面找卡
技术分享
            rtnTemp = SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen);
技术分享            
if (rtnTemp != 159)
技术分享            
{
技术分享                rtnTemp 
= SDT_StartFindIDCard(EdziPortID, ref pucIIN, EdziIfOpen);  //再找卡
技术分享
                if (rtnTemp != 159)
技术分享                
{                                   
技术分享                    rtnTemp 
= SDT_ClosePort(EdziPortID);
技术分享                    MessageBox.Show(
"未放卡或者卡未放好,请重新放卡!""提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
技术分享                    
return false;
技术分享                }

技术分享            }

技术分享            
//选卡
技术分享
            rtnTemp = SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen);
技术分享            
if (rtnTemp != 144)
技术分享            
{
技术分享                rtnTemp 
= SDT_SelectIDCard(EdziPortID, ref pucSN, EdziIfOpen);  //再选卡
技术分享
                if (rtnTemp != 144)
技术分享                
{                                      
技术分享                    rtnTemp 
= SDT_ClosePort(EdziPortID);
技术分享                    MessageBox.Show(
"读卡失败!""提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
技术分享                    
return false;
技术分享                }

技术分享            }

技术分享            
//注意,在这里,用户必须有应用程序当前目录的读写权限
技术分享
            FileInfo objFile = new FileInfo("wz.txt");
技术分享            
if (objFile.Exists)
技术分享            
{
技术分享                objFile.Attributes 
= FileAttributes.Normal;
技术分享                objFile.Delete();
技术分享            }

技术分享            objFile 
= new FileInfo("zp.bmp");
技术分享            
if (objFile.Exists)
技术分享            
{
技术分享                objFile.Attributes 
= FileAttributes.Normal;
技术分享                objFile.Delete();
技术分享            }

技术分享            objFile 
= new FileInfo("zp.wlt");
技术分享            
if (objFile.Exists)
技术分享            
{
技术分享                objFile.Attributes 
= FileAttributes.Normal;
技术分享                objFile.Delete();
技术分享            }

技术分享            rtnTemp 
= SDT_ReadBaseMsgToFile(EdziPortID, "wz.txt"ref puiCHMsgLen, "zp.wlt"ref puiPHMsgLen, EdziIfOpen);
技术分享            
if (rtnTemp != 144)
技术分享            
{                        
技术分享                rtnTemp 
= SDT_ClosePort(EdziPortID);
技术分享                MessageBox.Show(
"读卡失败!""提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
技术分享                
return false;
技术分享            }

技术分享            
//下面解析照片,注意,如果在C盘根目录下没有机具厂商的授权文件Termb.Lic,照片解析将会失败
技术分享
            if (bUsbPort)
技术分享                rtnTemp 
= GetBmp("zp.wlt"2);
技术分享            
else
技术分享                rtnTemp 
= GetBmp("zp.wlt"1);
技术分享            
switch (rtnTemp)
技术分享            
{
技术分享                
case 0:
技术分享                    MessageBox.Show(
"调用sdtapi.dll错误!""提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
技术分享                    
break;
技术分享                
case 1:   //正常
技术分享
                    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);
技术分享            FileInfo f 
= new FileInfo("wz.txt");
技术分享            FileStream fs 
= f.OpenRead();
技术分享            
byte[] bt = new byte[fs.Length];
技术分享            fs.Read(bt, 
0, (int)fs.Length);
技术分享            fs.Close();
技术分享
技术分享            
string str = System.Text.UnicodeEncoding.Unicode.GetString(bt);
技术分享
技术分享            objEDZ.Name 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 030).Trim();
技术分享            objEDZ.Sex_Code 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 302).Trim();
技术分享            objEDZ.NATION_Code 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 324).Trim();
技术分享            
string strBird = System.Text.UnicodeEncoding.Unicode.GetString(bt, 3616).Trim();
技术分享            objEDZ.BIRTH 
= Convert.ToDateTime(strBird.Substring(04+ "" + strBird.Substring(42+ "" + strBird.Substring(6+ "");
技术分享            objEDZ.ADDRESS 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 5270).Trim();
技术分享            objEDZ.IDC 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 12236).Trim();
技术分享            objEDZ.REGORG 
= System.Text.UnicodeEncoding.Unicode.GetString(bt, 15830).Trim();
技术分享            
string strTem = System.Text.UnicodeEncoding.Unicode.GetString(bt, 188, bt.GetLength(0- 188).Trim();
技术分享            objEDZ.STARTDATE 
= Convert.ToDateTime(strTem.Substring(04+ "" + strTem.Substring(42+ "" + strTem.Substring(62+ "");
技术分享            strTem 
= strTem.Substring(8);
技术分享            
if (strTem.Trim() != "长期")
技术分享            
{
技术分享                objEDZ.ENDDATE 
= Convert.ToDateTime(strTem.Substring(04+ "" + strTem.Substring(42+ "" + strTem.Substring(62+ "");
技术分享            }

技术分享            
else
技术分享            
{
技术分享                objEDZ.ENDDATE 
= DateTime.MaxValue;
技术分享            }

技术分享            objFile 
= new FileInfo("zp.bmp");
技术分享            
if (objFile.Exists)
技术分享            
{
技术分享                Image img 
= Image.FromFile("zp.bmp");
技术分享                objEDZ.PIC_Image
=(Image)img.Clone();
技术分享                System.IO.MemoryStream m 
= new MemoryStream();
技术分享                img.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
技术分享                objEDZ.PIC_Byte 
= m.ToArray();
技术分享                img.Dispose();
技术分享                img 
= null;
技术分享            }

技术分享            ReadICCardComplete(objEDZ);           
技术分享            
return true;
技术分享        }

技术分享
技术分享
技术分享    }

技术分享    
public class clsEDZ
技术分享    
{
技术分享        
private System.Collections.SortedList lstMZ = new SortedList();
技术分享        
private string _Name;   //姓名
技术分享
        private string _Sex_Code;   //性别代码
技术分享
        private string _Sex_CName;   //性别
技术分享
        private string _IDC;      //身份证号码
技术分享
        private string _NATION_Code;   //民族代码
技术分享
        private string _NATION_CName;   //民族
技术分享
        private DateTime _BIRTH;     //出生日期
技术分享
        private string _ADDRESS;    //住址
技术分享
        private string _REGORG;     //签发机关
技术分享
        private DateTime _STARTDATE;    //身份证有效起始日期
技术分享
        private DateTime _ENDDATE;    //身份证有效截至日期
技术分享
        private string _Period_Of_Validity_Code;   //有效期限代码,许多原来系统上面为了一代证考虑,常常存在这样的字段,二代证中已经没有了
技术分享
        private string _Period_Of_Validity_CName;   //有效期限
技术分享
        private byte[] _PIC_Byte;    //照片二进制
技术分享
        private Image _PIC_Image;   //照片
技术分享

技术分享        
public clsEDZ()
技术分享        
{
技术分享            lstMZ.Add(
"01""汉族");
技术分享            lstMZ.Add(
"02""蒙古族");
技术分享            lstMZ.Add(
"03""回族");
技术分享            lstMZ.Add(
"04""藏族");
技术分享            lstMZ.Add(
"05""维吾尔族");
技术分享            lstMZ.Add(
"06""苗族");
技术分享            lstMZ.Add(
"07""彝族");
技术分享            lstMZ.Add(
"08""壮族");
技术分享            lstMZ.Add(
"09""布依族");
技术分享            lstMZ.Add(
"10""朝鲜族");
技术分享            lstMZ.Add(
"11""满族");
技术分享            lstMZ.Add(
"12""侗族");
技术分享            lstMZ.Add(
"13""瑶族");
技术分享            lstMZ.Add(
"14""白族");
技术分享            lstMZ.Add(
"15""土家族");
技术分享            lstMZ.Add(
"16""哈尼族");
技术分享            lstMZ.Add(
"17""哈萨克族");
技术分享            lstMZ.Add(
"18""傣族");
技术分享            lstMZ.Add(
"19""黎族");
技术分享            lstMZ.Add(
"20""傈僳族");
技术分享            lstMZ.Add(
"21""佤族");
技术分享            lstMZ.Add(
"22""畲族");
技术分享            lstMZ.Add(
"23""高山族");
技术分享            lstMZ.Add(
"24""拉祜族");
技术分享            lstMZ.Add(
"25""水族");
技术分享            lstMZ.Add(
"26""东乡族");
技术分享            lstMZ.Add(
"27""纳西族");
技术分享            lstMZ.Add(
"28""景颇族");
技术分享            lstMZ.Add(
"29""柯尔克孜族");
技术分享            lstMZ.Add(
"30""土族");
技术分享            lstMZ.Add(
"31""达翰尔族");
技术分享            lstMZ.Add(
"32""仫佬族");
技术分享            lstMZ.Add(
"33""羌族");
技术分享            lstMZ.Add(
"34""布朗族");
技术分享            lstMZ.Add(
"35""撒拉族");
技术分享            lstMZ.Add(
"36""毛南族");
技术分享            lstMZ.Add(
"37""仡佬族");
技术分享            lstMZ.Add(
"38""锡伯族");
技术分享            lstMZ.Add(
"39""阿昌族");
技术分享            lstMZ.Add(
"40""普米族");
技术分享            lstMZ.Add(
"41""塔吉克族");
技术分享            lstMZ.Add(
"42""怒族");
技术分享            lstMZ.Add(
"43""乌孜别克族");
技术分享            lstMZ.Add(
"44""俄罗斯族");
技术分享            lstMZ.Add(
"45""鄂温克族");
技术分享            lstMZ.Add(
"46""德昂族");
技术分享            lstMZ.Add(
"47""保安族");
技术分享            lstMZ.Add(
"48""裕固族");
技术分享            lstMZ.Add(
"49""京族");
技术分享            lstMZ.Add(
"50""塔塔尔族");
技术分享            lstMZ.Add(
"51""独龙族");
技术分享            lstMZ.Add(
"52""鄂伦春族");
技术分享            lstMZ.Add(
"53""赫哲族");
技术分享            lstMZ.Add(
"54""门巴族");
技术分享            lstMZ.Add(
"55""珞巴族");
技术分享            lstMZ.Add(
"56""基诺族");
技术分享            lstMZ.Add(
"57""其它");
技术分享            lstMZ.Add(
"98""外国人入籍");
技术分享        }

技术分享
技术分享        
public string Name
技术分享        
{
技术分享            
get return _Name; }
技术分享            
set { _Name = value; }
技术分享        }

技术分享        
public string Sex_Code
技术分享        
{
技术分享            
get return _Sex_Code; }
技术分享            
set
技术分享            
{
技术分享                _Sex_Code 
= value;
技术分享                
switch (value)
技术分享                
{
技术分享                    
case "1":
技术分享                        Sex_CName 
= "";
技术分享                        
break;
技术分享                    
case "2":
技术分享                        Sex_CName 
= "";
技术分享                        
break;
技术分享                }

技术分享            }

技术分享        }

技术分享        
public string Sex_CName
技术分享        
{
技术分享            
get return _Sex_CName; }
技术分享            
set { _Sex_CName = value; }
技术分享        }

技术分享        
public string IDC
技术分享        
{
技术分享            
get return _IDC; }
技术分享            
set { _IDC = value; }
技术分享        }

技术分享        
public string NATION_Code
技术分享        
{
技术分享            
get return _NATION_Code; }
技术分享            
set
技术分享            
{
技术分享                _NATION_Code 
= value;
技术分享                
if (lstMZ.Contains(value))
技术分享                    NATION_CName 
= lstMZ[value].ToString();
技术分享            }

技术分享        }

技术分享        
public string NATION_CName
技术分享        
{
技术分享            
get return _NATION_CName; }
技术分享            
set { _NATION_CName = value; }
技术分享        }

技术分享        
public DateTime BIRTH
技术分享        
{
技术分享            
get return _BIRTH; }
技术分享            
set { _BIRTH = value; }
技术分享        }

技术分享        
public string ADDRESS
技术分享        
{
技术分享            
get return _ADDRESS; }
技术分享            
set { _ADDRESS = value; }
技术分享        }

技术分享        
public string REGORG
技术分享        
{
技术分享            
get return _REGORG; }
技术分享            
set { _REGORG = value; }
技术分享        }

技术分享        
public DateTime STARTDATE
技术分享        
{
技术分享            
get return _STARTDATE; }
技术分享            
set { _STARTDATE = value; }
技术分享        }

技术分享        
public DateTime ENDDATE
技术分享        
{
技术分享            
get return _ENDDATE; }
技术分享            
set
技术分享            
{
技术分享                _ENDDATE 
= value;
技术分享                
if (_ENDDATE == DateTime.MaxValue)
技术分享                
{
技术分享                    _Period_Of_Validity_Code 
= "3";
技术分享                    _Period_Of_Validity_CName 
= "长期";
技术分享                }

技术分享                
else
技术分享                
{
技术分享                    
if (_STARTDATE != DateTime.MinValue)
技术分享                    
{
技术分享                        
switch (value.AddDays(1).Year - _STARTDATE.Year)
技术分享                        
{
技术分享                            
case 5:
技术分享                                _Period_Of_Validity_Code 
= "4";
技术分享                                _Period_Of_Validity_CName 
= "5年";
技术分享                                
break;
技术分享                            
case 10:
技术分享                                _Period_Of_Validity_Code 
= "1";
技术分享                                _Period_Of_Validity_CName 
= "10年";
技术分享                                
break;
技术分享                            
case 20:
技术分享                                _Period_Of_Validity_Code 
= "2";
技术分享                                _Period_Of_Validity_CName 
= "20年";
技术分享                                
break;
技术分享                        }

技术分享                    }

技术分享                }

技术分享
技术分享            }

技术分享        }

技术分享        
public string Period_Of_Validity_Code
技术分享        
{
技术分享            
get return _Period_Of_Validity_Code; }
技术分享            
set { _Period_Of_Validity_Code = value; }
技术分享        }

技术分享        
public string Period_Of_Validity_CName
技术分享        
{
技术分享            
get return _Period_Of_Validity_CName; }
技术分享            
set { _Period_Of_Validity_CName = value; }
技术分享        }

技术分享        
public byte[] PIC_Byte
技术分享        
{
技术分享            
get return _PIC_Byte; }
技术分享            
set { _PIC_Byte = value; }
技术分享        }

技术分享        
public Image PIC_Image
技术分享        
{
技术分享            
get return _PIC_Image; }
技术分享            
set { _PIC_Image = value; }
技术分享        }

技术分享
技术分享
技术分享
技术分享    }

技术分享}

   类中使用到了两个dll文件(sdtapi.dll和WltRS.dll),点击这里下载!

 

不同机具的通用的第二代居民身份证读写

标签:

原文地址:http://www.cnblogs.com/lonelyxmas/p/4313672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!