110,546
社区成员
发帖
与我相关
我的任务
分享
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
{
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, 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();
string strBird = System.Text.UnicodeEncoding.Unicode.GetString(bt, 36, 16).Trim();
objEDZ.BIRTH = Convert.ToDateTime(strBird.Substring(0, 4) + "年" + strBird.Substring(4, 2) + "月" + strBird.Substring(6) + "日");
objEDZ.ADDRESS = System.Text.UnicodeEncoding.Unicode.GetString(bt, 52, 70).Trim();
objEDZ.IDC = System.Text.UnicodeEncoding.Unicode.GetString(bt, 122, 36).Trim();
objEDZ.REGORG = System.Text.UnicodeEncoding.Unicode.GetString(bt, 158, 30).Trim();
string strTem = System.Text.UnicodeEncoding.Unicode.GetString(bt, 188, bt.GetLength(0) - 188).Trim();
objEDZ.STARTDATE = Convert.ToDateTime(strTem.Substring(0, 4) + "年" + strTem.Substring(4, 2) + "月" + strTem.Substring(6, 2) + "日");
strTem = strTem.Substring(8);
if (strTem.Trim() != "长期")
{
objEDZ.ENDDATE = Convert.ToDateTime(strTem.Substring(0, 4) + "年" + strTem.Substring(4, 2) + "月" + strTem.Substring(6, 2) + "日");
}
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;
}
}
}
using ICCard;
public partial class Form1 : Form
{
/// <summary>
/// 系统主窗口
/// </summary>
public Form1()
{
InitializeComponent();
}
clsICCard card = new clsICCard();
private void Form1_Load(object sender, EventArgs e)
{
card.ReadICCardComplete += new clsICCard.De_ReadICCardComplete(card_ReadICCardComplete);
}
protected override void OnClosing(CancelEventArgs e)
{
card.ReadICCardComplete += new clsICCard.De_ReadICCardComplete(card_ReadICCardComplete);
base.OnClosing(e);
}
private void button1_Click(object sender , EventArgs e)
{
card.ReadICCard();
}
void card_ReadICCardComplete(clsEDZ objEDZ)
{
}
}
using System;
using ICCard;
public class Demo
{
private static void Main()
{
clsICCard card = new clsICCard();
card.ReadICCardComplete += new clsICCard.De_ReadICCardComplete(card_ReadICCardComplete);
card.ReadICCard();
Console.ReadLine();
}
static void card_ReadICCardComplete(clsEDZ objEDZ)
{
}
}
clsICCard ReadICCard=new clsICCard();
ReadICCard.ReadICCardComplete+=new De_ReadICCardComplete (Method);
void Method(clsEDZ objEDZ)
{
//
}