一个关于二代身份证阅读器的问题...不知道怎么调用

huncker 2009-03-25 01:34:46
现在要做一个身份证阅读的项目,有人写了这一段代码,可惜不知道怎么调用...




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;
}


}
}
...全文
1196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bianming3333 2011-04-10
  • 打赏
  • 举报
回复
还是看不懂啊
aqaq2 2011-03-25
  • 打赏
  • 举报
回复
把整个项目发一下吧~
这个好象缺了DLL的调用~
tayirvb 2011-03-24
  • 打赏
  • 举报
回复
有没有下载例子?
SAP辉哥 2009-03-27
  • 打赏
  • 举报
回复
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)
{

}
}
wuyq11 2009-03-25
  • 打赏
  • 举报
回复
clsICCard card = new clsICCard();
De_ReadICCardComplete r=new De_ReadICCardComplete(card.ReadICCard());
cppfaq 2009-03-25
  • 打赏
  • 举报
回复
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)
{

}
}
hzg_1998 2009-03-25
  • 打赏
  • 举报
回复
/
clsICCard ReadICCard=new clsICCard();
ReadICCard.ReadICCardComplete+=new De_ReadICCardComplete (Method);
ReadICCard.ReadICCard();

void Method(clsEDZ objEDZ)
{
//
}
hzg_1998 2009-03-25
  • 打赏
  • 举报
回复

clsICCard ReadICCard=new clsICCard();
ReadICCard.ReadICCardComplete+=new De_ReadICCardComplete (Method);

void Method(clsEDZ objEDZ)
{
//
}

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧