You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
11 KiB
220 lines
11 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Linq;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using ShenTun.IcCard.Common;
|
|
|
|
namespace ShenTun.IcCard.Instance
|
|
{
|
|
/// <summary>
|
|
/// 精伦(IDR-210)
|
|
/// </summary>
|
|
public class ReadCardByIDR210 : IReadCard
|
|
{
|
|
Response IReadCard.GetReadCard()
|
|
{
|
|
int iPort = 1001;
|
|
//int baud = 115200;
|
|
string sexId = string.Empty;
|
|
string nationId = string.Empty;
|
|
string birthTmp = string.Empty;
|
|
Response res = new Response()
|
|
{
|
|
code = -101
|
|
};
|
|
int handle = -1;
|
|
IDCardInfo idCard = new IDCardInfo();
|
|
try
|
|
{
|
|
|
|
IDR210.Routon_RepeatRead(true);
|
|
int intOpenRet = IDR210.InitComm(iPort);
|
|
if (intOpenRet != 1)
|
|
{
|
|
res.code = -101;
|
|
res.message = "阅读机具未连接!";
|
|
return res;
|
|
}
|
|
//卡认证
|
|
handle = IDR210.Authenticate();
|
|
if (handle != 1)
|
|
{
|
|
res.code = -101;
|
|
res.message = "卡认证失败!";
|
|
IDR210.CloseComm();
|
|
return res;
|
|
}
|
|
int cardType = IDR210.Routon_DecideIDCardType();
|
|
if (cardType == 100)//身份证
|
|
{
|
|
//三种方式读取基本信息
|
|
//ReadBaseInfos(推荐使用)
|
|
StringBuilder Name = new StringBuilder(31);
|
|
StringBuilder Gender = new StringBuilder(3);
|
|
StringBuilder Folk = new StringBuilder(10);
|
|
StringBuilder BirthDay = new StringBuilder(9);
|
|
StringBuilder Code = new StringBuilder(19);
|
|
StringBuilder Address = new StringBuilder(71);
|
|
StringBuilder Agency = new StringBuilder(31);
|
|
StringBuilder ExpireStart = new StringBuilder(9);
|
|
StringBuilder ExpireEnd = new StringBuilder(9);
|
|
StringBuilder directory = new StringBuilder(100);
|
|
StringBuilder pucFPMsg = new StringBuilder(1024);
|
|
|
|
directory.Append("C:\\");
|
|
|
|
int intReadBaseInfosRet = IDR210.ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd);
|
|
if (intReadBaseInfosRet != 1)
|
|
{
|
|
res.code = -101;
|
|
res.message = "读卡失败!";
|
|
IDR210.CloseComm();
|
|
return res;
|
|
}
|
|
|
|
idCard.IDCode = Code.ToString();
|
|
idCard.Name = Name.ToString();
|
|
idCard.Sex = Gender.ToString();
|
|
|
|
if (!Folk.ToString().Contains("族"))
|
|
idCard.Nation = Folk.ToString() + "族";
|
|
else
|
|
idCard.Nation = Folk.ToString();
|
|
|
|
idCard.Birthday =string.Format("{0}-{1}-{2}", BirthDay.ToString().Substring(0, 4), BirthDay.ToString().Substring(4, 2), BirthDay.ToString().Substring(6, 2));;
|
|
idCard.Address = Address.ToString();
|
|
string path_current = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
|
//string path_current = Assembly.GetExecutingAssembly().Location;
|
|
//string path_current = System.IO.Directory.GetCurrentDirectory();
|
|
string img = "IDR210\\photo.bmp";
|
|
string file = string.Format("{0}\\{1}", path_current, img);
|
|
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
|
|
byte[] imageByte = new byte[file.Length];
|
|
BinaryReader br = new BinaryReader(fs);
|
|
imageByte = br.ReadBytes(Convert.ToInt32(fs.Length));
|
|
|
|
MemoryStream ms = new MemoryStream(imageByte);
|
|
Bitmap bm = new Bitmap(ms);
|
|
string base64 = ImageHelper.ToBase64(bm, ImageFormat.Bmp);
|
|
fs.Dispose();
|
|
ms.Dispose();
|
|
idCard.Photo = base64;
|
|
}
|
|
else if (cardType == 101) //外国人居留证
|
|
{
|
|
StringBuilder Fgn_EnName = new StringBuilder(121); //英文姓名
|
|
StringBuilder Fgn_Gender = new StringBuilder(3); //性别
|
|
StringBuilder Fgn_Code = new StringBuilder(31); //外国身份证号码
|
|
StringBuilder Fgn_Nation = new StringBuilder(7); //国籍
|
|
StringBuilder Fgn_CnName = new StringBuilder(31); //中文姓名
|
|
StringBuilder Fgn_BirthDay = new StringBuilder(16); //出生日期
|
|
StringBuilder Fgn_ExpireStart = new StringBuilder(17); //证件有效期起始日期
|
|
StringBuilder Fgn_ExpireEnd = new StringBuilder(17); //证件有效期截至日期
|
|
StringBuilder Fgn_CardVersion = new StringBuilder(5); //证件版本号信息
|
|
StringBuilder Fgn_Agency = new StringBuilder(9); //申请受理机关代码
|
|
StringBuilder Fgn_CardType = new StringBuilder(3); //证件类型标识
|
|
StringBuilder Fgn_FutureItem = new StringBuilder(7); //预留项信息 暂无意义
|
|
|
|
int FornRet = IDR210.Routon_ReadAllForeignBaseInfos(Fgn_EnName, Fgn_Gender, Fgn_Code, Fgn_Nation, Fgn_CnName,
|
|
Fgn_BirthDay, Fgn_ExpireStart, Fgn_ExpireEnd, Fgn_CardVersion, Fgn_Agency, Fgn_CardType, Fgn_FutureItem);
|
|
if (FornRet != 1)
|
|
{
|
|
res.code = -101;
|
|
res.message = "读卡失败!";
|
|
IDR210.CloseComm();
|
|
return res;
|
|
}
|
|
idCard.IDCode = Fgn_Code.ToString();
|
|
idCard.Name = Fgn_EnName.ToString() + " " + Fgn_CnName.ToString();
|
|
idCard.Sex = Fgn_Gender.ToString();
|
|
idCard.Birthday = string.Format("{0}-{1}-{2}", Fgn_BirthDay.ToString().Substring(0, 4), Fgn_BirthDay.ToString().Substring(4, 2), Fgn_BirthDay.ToString().Substring(6, 2));
|
|
//idCard.Nation = Fgn_Nation.ToString();
|
|
|
|
string path_current = System.IO.Directory.GetCurrentDirectory();
|
|
string img = "IDR210\\photo.bmp";
|
|
string file = string.Format("{0}\\{1}", path_current, img);
|
|
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
|
|
byte[] imageByte = new byte[file.Length];
|
|
BinaryReader br = new BinaryReader(fs);
|
|
imageByte = br.ReadBytes(Convert.ToInt32(fs.Length));
|
|
|
|
MemoryStream ms = new MemoryStream(imageByte);
|
|
Bitmap bm = new Bitmap(ms);
|
|
string base64 = ImageHelper.ToBase64(bm, ImageFormat.Bmp);
|
|
fs.Dispose();
|
|
ms.Dispose();
|
|
idCard.Photo = base64;
|
|
}
|
|
else if (cardType == 102) //港澳台居住证
|
|
{
|
|
StringBuilder GAT_Name = new StringBuilder(31); //姓名
|
|
StringBuilder GAT_Sex = new StringBuilder(3); //性别
|
|
StringBuilder GAT_FutureItem1 = new StringBuilder(5); //港澳台居住证第一块预留区信息
|
|
StringBuilder GAT_BirthDay = new StringBuilder(17); //出生日期
|
|
StringBuilder GAT_Address = new StringBuilder(71); //地址
|
|
StringBuilder GAT_CardNo = new StringBuilder(37); //证件号码
|
|
StringBuilder GAT_Agency = new StringBuilder(31); //签发机关
|
|
StringBuilder GAT_ExpireStart = new StringBuilder(17); //证件有效期起始日期
|
|
StringBuilder GAT_ExpireEnd = new StringBuilder(17); //证件有效期截至日期
|
|
StringBuilder GAT_PassCardNo = new StringBuilder(19); //通行证号码
|
|
StringBuilder GAT_PassNu = new StringBuilder(5); //签发次数
|
|
StringBuilder GAT_FutureItem2 = new StringBuilder(7); //港澳台居住证第二块预留区信息
|
|
StringBuilder GAT_CardType = new StringBuilder(3); //证件类型标识
|
|
StringBuilder GAT_FutureItem3 = new StringBuilder(7); //港澳台居住证第三块预留区信息
|
|
|
|
int GATRet = IDR210.Routon_ReadAllGATBaseInfos(GAT_Name, GAT_Sex, GAT_FutureItem1, GAT_BirthDay, GAT_Address, GAT_CardNo,
|
|
GAT_Agency, GAT_ExpireStart, GAT_ExpireEnd, GAT_PassCardNo, GAT_PassNu, GAT_FutureItem2, GAT_CardType, GAT_FutureItem3);
|
|
if (GATRet != 1)
|
|
{
|
|
res.code = -101;
|
|
res.message = "读卡失败!";
|
|
IDR210.CloseComm();
|
|
return res;
|
|
}
|
|
idCard.IDCode = GAT_CardNo.ToString();
|
|
idCard.Name = GAT_Name.ToString();
|
|
idCard.Sex = GAT_Sex.ToString();
|
|
idCard.Birthday = string.Format("{0}-{1}-{2}", GAT_BirthDay.ToString().Substring(0, 4), GAT_BirthDay.ToString().Substring(4, 2), GAT_BirthDay.ToString().Substring(6, 2));
|
|
idCard.Address = GAT_Address.ToString();
|
|
|
|
string path_current = System.IO.Directory.GetCurrentDirectory();
|
|
string img = "IDR210\\photo.bmp";
|
|
string file = string.Format("{0}\\{1}", path_current, img);
|
|
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
|
|
byte[] imageByte = new byte[file.Length];
|
|
BinaryReader br = new BinaryReader(fs);
|
|
imageByte = br.ReadBytes(Convert.ToInt32(fs.Length));
|
|
|
|
MemoryStream ms = new MemoryStream(imageByte);
|
|
Bitmap bm = new Bitmap(ms);
|
|
string base64 = ImageHelper.ToBase64(bm, ImageFormat.Bmp);
|
|
fs.Dispose();
|
|
ms.Dispose();
|
|
idCard.Photo = base64;
|
|
}
|
|
|
|
res.code = 1;
|
|
res.data = idCard;
|
|
res.message = "Success";
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(string.Format("读卡器接口操作失败:{0}", ex.Message));
|
|
}
|
|
finally
|
|
{
|
|
if (handle > 0)
|
|
IDR210.CloseComm();
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
}
|