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.
148 lines
5.9 KiB
148 lines
5.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Linq;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using ShenTun.IcCard.Common;
|
|
namespace ShenTun.IcCard.Instance
|
|
{
|
|
/// <summary>
|
|
/// 德卡(T10-D)
|
|
/// </summary>
|
|
public class ReadCardByDCT10D : 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
|
|
{
|
|
|
|
handle = DCTD10.DCSDT_Open(iPort, baud);
|
|
if (handle < 0)
|
|
{
|
|
res.code = -101;
|
|
res.message = "打开读卡设备失败,请重新插拨读卡器!";
|
|
return res;
|
|
}
|
|
|
|
byte[] management_number = new byte[9];
|
|
|
|
byte[] serial_number = new byte[17];
|
|
|
|
var find = DCTD10.DCSDT_SearchIdCard(handle, management_number, serial_number);
|
|
|
|
if (find < 0)//巡卡失败
|
|
{
|
|
res.code = -102;
|
|
res.message = "巡卡失败,请拿开身份证重新放置!";
|
|
return res;
|
|
}
|
|
|
|
var type = DCTD10.DCSDT_GetIdCardType(handle);
|
|
|
|
if (type < 0)
|
|
{
|
|
res.code = -103;
|
|
res.message = "获取卡类型失败,请拿开身份证重新放置!";
|
|
return res;
|
|
}
|
|
else
|
|
{
|
|
if (type == 0)
|
|
{
|
|
var result = DCTD10.DCSDT_IdCardRead(handle, 1);
|
|
if (result < 0)
|
|
{
|
|
res.code = -104;
|
|
res.message = "获取ID卡失败,请拿开身份证重新放置!";
|
|
return res;
|
|
}
|
|
byte[] kName = new byte[64];
|
|
byte[] bSex = new byte[8];
|
|
byte[] bNation = new byte[12];
|
|
byte[] bBirth = new byte[36];
|
|
byte[] kAddress = new byte[144];
|
|
byte[] kIdNumber = new byte[76];
|
|
byte[] kPhoto = new byte[4096];
|
|
|
|
var bname = DCTD10.DCSDT_IdCardContent(handle, 1, kName);
|
|
var bsex = DCTD10.DCSDT_IdCardContent(handle, 2, bSex);
|
|
var bnation = DCTD10.DCSDT_IdCardContent(handle, 3, bNation);
|
|
var bbirth = DCTD10.DCSDT_IdCardContent(handle, 4, bBirth);
|
|
var bAddress = DCTD10.DCSDT_IdCardContent(handle, 5, kAddress);
|
|
var bIdNumber = DCTD10.DCSDT_IdCardContent(handle, 6, kIdNumber);
|
|
var bPhoto = DCTD10.DCSDT_IdCardContent(handle, 10, kPhoto);
|
|
|
|
idCard.Name = System.Text.Encoding.Default.GetString(kName).TrimEnd('\0');
|
|
|
|
sexId = System.Text.Encoding.Default.GetString(bSex).TrimEnd('\0');
|
|
var sex= BaseData.sList.Where(p => p.Id.Equals(sexId)).FirstOrDefault();
|
|
idCard.Sex = sex.Name;
|
|
|
|
idCard.IDCode = System.Text.Encoding.Default.GetString(kIdNumber).TrimEnd('\0');
|
|
|
|
birthTmp = System.Text.Encoding.Default.GetString(bBirth).TrimEnd('\0');
|
|
idCard.Birthday = string.Format("{0}-{1}-{2}", birthTmp.Substring(0, 4), birthTmp.Substring(4, 2), birthTmp.Substring(6, 2));
|
|
|
|
idCard.Address = System.Text.Encoding.Default.GetString(kAddress).TrimEnd('\0');
|
|
|
|
nationId = System.Text.Encoding.Default.GetString(bNation).TrimEnd('\0');
|
|
var nation = BaseData.nList.Where(p => p.Id.Equals(nationId)).FirstOrDefault();
|
|
idCard.Nation = nation.FullName;
|
|
|
|
if (bPhoto == 0)
|
|
{
|
|
string path_current = System.IO.Directory.GetCurrentDirectory();
|
|
string img = "zp.bmp";
|
|
string file = string.Format("{0}\\{1}", path_current, img);
|
|
|
|
byte[] byteArray = System.Text.Encoding.Default.GetBytes(file);
|
|
|
|
var photo = DCTD10.DCSDT_PhotoToBmpFile(kPhoto, byteArray);
|
|
|
|
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)
|
|
DCTD10.DCSDT_Close(handle);
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
}
|