zoukankan      html  css  js  c++  java
  • 明泰MT8身份证读卡器c#代码by山西导通

    明泰MT8身份证读卡器c#代码by山西导通

    下载附件:明泰MT8身份证读卡器c#

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Runtime.InteropServices;
      6 using System.Drawing;
      7 using System.IO;
      8 //明泰身份证读取功能
      9 namespace mt8
     10 {
     11     /// <summary>
     12     /// 身份证读取
     13     /// </summary>
     14     public class SFZ_32dll
     15     {
     16 
     17         /// <summary>
     18         /// 打开设备
     19         /// </summary>
     20         /// <param name="nPort">usb为0</param>
     21         /// <param name="ulBaud">9600</param>
     22         /// <returns>>0为读取成功</returns>
     23         [DllImport("mtx_32.dll", EntryPoint = "device_open", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     24         public static extern int device_open(int nPort, long ulBaud);
     25         /// <summary>
     26         /// 关闭设备
     27         /// </summary>
     28         /// <param name="icdev">设备id</param>
     29         /// <returns>0为成功</returns>
     30         [DllImport("mtx_32.dll", EntryPoint = "device_close", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     31         public static extern int device_close(int icdev);
     32 
     33 
     34         /// <summary>
     35         /// 开始读取身份证
     36         /// </summary>
     37         /// <param name="icdev">设备id</param>
     38         /// <param name="message">错误信息</param>
     39         /// <returns>0为成功</returns>
     40         [DllImport("mtx_32.dll", EntryPoint = "IDCard_ReadCard", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     41         public static extern int IDCard_ReadCard(int icdev, [MarshalAs(UnmanagedType.LPArray)]byte[] message);
     42         /// <summary>
     43         /// 获取身份证信息
     44         /// </summary>
     45         /// <param name="icdev">设备id</param>
     46         /// <param name="index">0--姓名,1--性别,2--民族,3--出生日期,4--住址,5--公民身份号码,6--签发机关,7--有效期起始日期,8--有效期截止日期,9--预留区,10--照片文件名。</param>
     47         /// <param name="infodata"></param>
     48         /// <returns></returns>
     49         [DllImport("mtx_32.dll", EntryPoint = "IDCard_GetCardInfo", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     50         public static extern int IDCard_GetCardInfo(int icdev, int index, [MarshalAs(UnmanagedType.LPArray)]byte[] infodata);
     51 
     52         /// <summary>
     53         /// 读取身份证上的数据,同时可以设置照片保存路径。
     54         /// </summary>
     55         /// <param name="icdev">设备id</param>
     56         /// <param name="lpInPhoneSaveFile">照片路径</param>
     57         /// <param name="message">返回错误信息</param>
     58         /// <returns>0为正确</returns>
     59         [DllImport("mtx_32.dll", EntryPoint = "IDCard_ReadCard_Extra", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     60         public static extern int IDCard_ReadCard_Extra(int icdev, [MarshalAs(UnmanagedType.LPArray)]byte[] lpInPhoneSaveFile, [MarshalAs(UnmanagedType.LPArray)]byte[] message);
     61    
     62        [DllImport("mtx_32.dll", EntryPoint = "device_beep", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
     63        public static extern int device_beep(int icdev, short delaytime,int times);
     64     }
     65     public class MT8IDCardRead
     66     {
     67         /// <summary>
     68         /// 身份证信息
     69         /// </summary>
     70         public IDCard IDCard1; 
     71         /// <summary>
     72         /// 读取身份证信息不包含图片
     73         /// </summary>
     74         /// <returns>是否成功</returns>
     75         public bool GetIDCardInfo()
     76         {
     77             int idev = 0;
     78             try
     79             {
     80                 IDCard1 = new IDCard();
     81                 int isOp = 0;
     82                 isOp = mt8.SFZ_32dll.device_open(0, 9600);
     83                 if (isOp > 0)
     84                 {
     85                     idev = isOp;
     86                     byte[] msr = new byte[100];
     87                   int rs=mt8.SFZ_32dll.IDCard_ReadCard(isOp,msr);
     88                
     89                   if (rs==0)
     90                   {
     91                       for (int i = 0; i < 10; i++)
     92                       {
     93                           byte[] info = new byte[79];
     94                           mt8.SFZ_32dll.IDCard_GetCardInfo(isOp,i,info);
     95                           string infoStr=UnicodeEncoding.Default.GetString(info);
     96                           switch (i)
     97                           {
     98                             case  0:
     99                              IDCard1.SName =infoStr.Trim();
    100                              break;
    101                             case 1:
    102                              IDCard1.SSex = infoStr.Trim();
    103                              break;
    104                             case 2:
    105                              IDCard1.SNation = infoStr.Trim();
    106                              break;
    107                             case 3:
    108                              infoStr = infoStr.Trim().Insert(4, ".");
    109                              infoStr = infoStr.Trim().Insert(7, ".");
    110                              IDCard1.DBirthday =DateTime.Parse(infoStr);
    111                              break;
    112                             case 4:
    113                              IDCard1.SAddress = infoStr.Trim();
    114                              break;
    115                             case 5:
    116                              IDCard1.SIDNumber = infoStr.Trim();
    117                              break;
    118                             case 6:
    119                              IDCard1.SIssueDepartment = infoStr.Trim();
    120                              break;
    121                             case 7:
    122                              infoStr = infoStr.Trim().Insert(4, ".");
    123                              infoStr = infoStr.Trim().Insert(7, ".");
    124                              IDCard1.DValidFromDate =DateTime.Parse(infoStr);
    125                              break;
    126                             case 8:
    127                              infoStr = infoStr.Trim().Insert(4, ".");
    128                              infoStr = infoStr.Trim().Insert(7, ".");
    129                              IDCard1.DValidExpiryDate = DateTime.Parse(infoStr);
    130                              break;
    131                             case 9:
    132                              IDCard1.SReserve = infoStr.Trim();
    133                              break;
    134                               default:
    135                                   break;
    136                           }
    137                          
    138 
    139                       }
    140                       mt8.SFZ_32dll.device_beep(isOp, 1285, 2);
    141                   }
    142                   else
    143                   {
    144                       IDCard1.Message1 = "身份证读取失败!" + UnicodeEncoding.Default.GetString(msr);
    145                       return false;
    146                   }
    147 
    148                 }
    149                 else
    150                 {
    151                     IDCard1.Message1 = "读卡器连接失败!";
    152                     return false;
    153                 }
    154             }
    155             catch (Exception)
    156             {
    157 
    158                 IDCard1.Message1 = "读取信息异常请重试!";
    159                 return false;
    160             }
    161             finally
    162             {
    163                 try
    164                 {
    165                     if (idev>0)
    166                     {
    167                       int a=  mt8.SFZ_32dll.device_close(idev);
    168                       if (a==0)
    169                       {
    170                           IDCard1.Message1 += "读卡器已关闭!";
    171                       }
    172                       else
    173                       {
    174                           IDCard1.Message1 += "读卡器关闭失败!";
    175                       }
    176                     }
    177                 }
    178                 catch
    179                 {
    180                 }
    181             }
    182             return true;
    183         }
    184         /// <summary>
    185         /// 读取身份证信息包含图片
    186         /// </summary>
    187         /// <returns>是否成功</returns>
    188         public bool GetIDCardInfoWithPhoto()
    189         {
    190             int idev = 0;
    191             try
    192             {
    193                 IDCard1 = new IDCard();
    194                 string pathstr = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\IDCard.bmp"; 
    195                 try
    196                 {
    197                     FileInfo fi = new FileInfo(pathstr);
    198 
    199                     if (fi.Exists)
    200                     {
    201                         fi.Delete();
    202                     }
    203 
    204                 }
    205                 catch
    206                 {
    207                 }
    208                 int isOp = 0;
    209                 isOp = mt8.SFZ_32dll.device_open(0, 9600);
    210                 if (isOp > 0)
    211                 {
    212                     idev = isOp;
    213                     byte[] msr = new byte[100];
    214 
    215                     byte[] path = System.Text.Encoding.ASCII.GetBytes(pathstr);
    216                     int rs = mt8.SFZ_32dll.IDCard_ReadCard_Extra(isOp,path,msr);                    
    217                     if (rs == 0)
    218                     {
    219                         for (int i = 0; i < 10; i++)
    220                         {
    221                             byte[] info = new byte[79];
    222                             mt8.SFZ_32dll.IDCard_GetCardInfo(isOp, i, info);
    223                             string infoStr = UnicodeEncoding.Default.GetString(info);
    224                             switch (i)
    225                             {
    226                                 case 0:
    227                                     IDCard1.SName = infoStr.Trim();
    228                                     break;
    229                                 case 1:
    230                                     IDCard1.SSex = infoStr.Trim();
    231                                     break;
    232                                 case 2:
    233                                     IDCard1.SNation = infoStr.Trim();
    234                                     break;
    235                                 case 3:
    236                                     infoStr = infoStr.Trim().Insert(4, ".");
    237                                     infoStr = infoStr.Trim().Insert(7, ".");
    238                                     IDCard1.DBirthday = DateTime.Parse(infoStr);
    239                                     break;
    240                                 case 4:
    241                                     IDCard1.SAddress = infoStr.Trim();
    242                                     break;
    243                                 case 5:
    244                                     IDCard1.SIDNumber = infoStr.Trim();
    245                                     break;
    246                                 case 6:
    247                                     IDCard1.SIssueDepartment = infoStr.Trim();
    248                                     break;
    249                                 case 7:
    250                                     infoStr = infoStr.Trim().Insert(4, ".");
    251                                     infoStr = infoStr.Trim().Insert(7, ".");
    252                                     IDCard1.DValidFromDate = DateTime.Parse(infoStr);
    253                                     break;
    254                                 case 8:
    255                                     infoStr = infoStr.Trim().Insert(4, ".");
    256                                     infoStr = infoStr.Trim().Insert(7, ".");
    257                                     IDCard1.DValidExpiryDate = DateTime.Parse(infoStr);
    258                                     break;
    259                                 case 9:
    260                                     IDCard1.SReserve = infoStr.Trim();
    261                                     break;
    262                                 default:
    263                                     break;
    264                             }
    265 
    266                             mt8.SFZ_32dll.device_beep(isOp, 1285, 2);
    267                         }
    268                         Image cardim = GetImageFromPath(pathstr);
    269                         if (cardim!=null)
    270                         {
    271                             IDCard1.BPhoto = cardim;
    272                             IDCard1.SPhotoPath = pathstr;
    273                         }
    274 
    275                     }
    276                     else
    277                     {
    278                         IDCard1.Message1 = "身份证读取失败!" + UnicodeEncoding.Default.GetString(msr).Trim();
    279                         return false;
    280                     }
    281 
    282                 }
    283                 else
    284                 {
    285                     IDCard1.Message1 = "读卡器连接失败!";
    286                     return false;
    287                 }
    288             }
    289             catch (Exception eer)
    290             {
    291 
    292                 IDCard1.Message1 = "读取信息异常请重试!"+eer.Message;
    293                 return false;
    294             }
    295             finally
    296             {
    297                 try
    298                 {
    299                     if (idev > 0)
    300                     {
    301                         int a = mt8.SFZ_32dll.device_close(idev);
    302                         if (a == 0)
    303                         {
    304                             IDCard1.Message1 += "读卡器已关闭!";
    305                         }
    306                         else
    307                         {
    308                             IDCard1.Message1 += "读卡器关闭失败!";
    309                         }
    310                     }
    311                 }
    312                 catch
    313                 {
    314                 }
    315             }
    316             return true;
    317         }
    318         /// <summary>
    319         /// 通过路径获取图片
    320         /// </summary>
    321         /// <param name="path"></param>
    322         /// <returns></returns>
    323         Image GetImageFromPath(string path)
    324         {
    325             Image im = null;
    326             try
    327             {
    328                 if (File.Exists(path))
    329                 {
    330                     FileStream fs = File.OpenRead(path);
    331                     im = Image.FromStream(fs);
    332                     fs.Close();
    333                     
    334                 }
    335             }
    336             catch (Exception)
    337             {
    338             }
    339             return im;
    340         }
    341     }
    342     /// <summary>
    343     /// 身份证信息类
    344     /// </summary>
    345     public class IDCard
    346     {
    347         string sName;
    348         /// <summary>
    349         /// 姓名
    350         /// </summary>
    351         public string SName
    352         {
    353             get { return sName; }
    354             set { sName = value; }
    355         }
    356         string sSex; //性别
    357         /// <summary>
    358         /// 性别
    359         /// </summary>
    360         public string SSex
    361         {
    362             get { return sSex; }
    363             set { sSex = value; }
    364         }
    365         string sNation; //名族
    366         /// <summary>
    367         /// 名族
    368         /// </summary>
    369         public string SNation
    370         {
    371             get { return sNation; }
    372             set { sNation = value; }
    373         }
    374         DateTime dBirthday; //出生日期
    375         /// <summary>
    376         /// 出生日期
    377         /// </summary>
    378         public DateTime DBirthday
    379         {
    380             get { return dBirthday; }
    381             set { dBirthday = value; }
    382         }
    383         string sAddress; //出生地址
    384         /// <summary>
    385         /// 出生地址
    386         /// </summary>
    387         public string SAddress
    388         {
    389             get { return sAddress; }
    390             set { sAddress = value; }
    391         }
    392         string sIDNumber; //身份证号码
    393         /// <summary>
    394         /// 身份证号码
    395         /// </summary>
    396         public string SIDNumber
    397         {
    398             get { return sIDNumber; }
    399             set { sIDNumber = value; }
    400         }
    401         string sIssueDepartment; //签发机关
    402         /// <summary>
    403         /// 签发机关
    404         /// </summary>
    405         public string SIssueDepartment
    406         {
    407             get { return sIssueDepartment; }
    408             set { sIssueDepartment = value; }
    409         }
    410         DateTime dValidFromDate; //证件有效期起始日期
    411         /// <summary>
    412         /// 证件有效期起始日期
    413         /// </summary>
    414         public DateTime DValidFromDate
    415         {
    416             get { return dValidFromDate; }
    417             set { dValidFromDate = value; }
    418         }
    419         DateTime dValidExpiryDate; //证件有效期截至日期
    420         /// <summary>
    421         /// 证件有效期截至日期
    422         /// </summary>
    423         public DateTime DValidExpiryDate
    424         {
    425             get { return dValidExpiryDate; }
    426             set { dValidExpiryDate = value; }
    427         }
    428         string sReserve; //预留信息
    429         /// <summary>
    430         /// 预留信息
    431         /// </summary>
    432         public string SReserve
    433         {
    434             get { return sReserve; }
    435             set { sReserve = value; }
    436         }
    437         Image bPhoto;
    438         /// <summary>
    439         /// 照片
    440         /// </summary>
    441         public Image BPhoto
    442         {
    443             get { return bPhoto; }
    444             set { bPhoto = value; }
    445         }
    446         string Message; //错误信息
    447         /// <summary>
    448         /// 错误信息
    449         /// </summary>
    450         public string Message1
    451         {
    452             get { return Message; }
    453             set { Message = value; }
    454         }
    455 
    456         string sPhotoPath;
    457         /// <summary>
    458         /// 图片路径 
    459         /// </summary>
    460         public string SPhotoPath
    461         {
    462             get { return sPhotoPath; }
    463             set { sPhotoPath = value; }
    464         }
    465     }
    466     
    467 }
    View Code
  • 相关阅读:
    java核心学习(十六) javaIO框架---Process类的流,读写其他进程
    java核心学习(十五) IO框架---重定向标准输入输出
    java核心学习(十四) IO框架---推回输入流
    java核心学习(十三) IO框架---转换流和缓冲流
    java核心学习(十二) IO框架---理解IO流
    递推+矩阵快速幂 HDU 2065
    树形DP hdu1520
    二分图之最小路径覆盖 HDU1151
    二分图之最小独立集 HDU 2768
    最短路 POJ2267
  • 原文地址:https://www.cnblogs.com/Witkey/p/3944264.html
Copyright © 2011-2022 走看看