using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
namespace Dk_Reader
{
public class Reader {
[DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_OpenPort",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int QHD_OpenPort(StringBuilder oErrMsg);
[DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_ClosePort",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int QHD_ClosePort(StringBuilder oErrMsg);
[DllImport("QHD_SmartMC.dll", EntryPoint = "QHD_ReadCard",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int QHD_ReadCard(StringBuilder oInfo, StringBuilder oErrMsg);
[DllImport("QHD_Card.dll", EntryPoint = "getKeyA",//读取卡中基本信息 getKeyStr_ext
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int getKeyA(IntPtr iReaderPort, int iReaderHandle, int oErrMsg);
[DllImport("QHD_Card.dll", EntryPoint = "getKeyStr_ext",//读取卡中基本信息 getKeyStr_ext
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int getKeyStr_ext(StringBuilder oErrMsg);
[DllImport("QHD_Card.dll", EntryPoint = "getKeyStr",//读取卡中基本信息 getKeyStr_ext
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int getKeyStr(IntPtr iReaderPort, int iReaderHandle, StringBuilder oErrMsg);
[DllImport("dkSICARD.dll", EntryPoint = "iDOpenPort",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int iDOpenPort(int iReaderPort, ref IntPtr iReaderHandle, StringBuilder oErrMsg);
[DllImport("dkSICARD.dll", EntryPoint = "iDCloseReader",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int iDCloseReader(IntPtr iReaderHandle, StringBuilder oErrMsg);
[DllImport("dkSICARD.dll", EntryPoint = "getCardNO_Ext",//读取卡中基本信息Ext
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int getCardNO_Ext(IntPtr iReaderHandle, StringBuilder iCardNo, StringBuilder iIDno, StringBuilder iName, StringBuilder iERRInfo);
[DllImport("dkSICARD.dll", EntryPoint = "getCardNO",//读取卡中基本信息
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int getCardNO(IntPtr iReaderHandle, StringBuilder iCardNo, StringBuilder oErrMsg);
//d8健康卡读卡器
[DllImport("dcrf32.dll", EntryPoint = "dc_init",//读取卡中基本信息
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Init(short param1, int param2);
[DllImport("dcrf32.dll", EntryPoint = "dc_config_card",//读卡配置
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8ConfigCard(int param1, int param2);
[DllImport("dcrf32.dll", EntryPoint = "dc_card",//寻卡,找到卡的序号
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Card(int param1, int param2, ref ulong param3);
[DllImport("dcrf32.dll", EntryPoint = "dc_load_key")]
public static extern Int16 d8LoadKey(int icdev, int mode,int secnr,[In] byte[] nkey ); //密码装载到读写模块中
[DllImport("dcrf32.dll", EntryPoint = "dc_load_key_hex",//16进制读取
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8LoadKeyHex(int param1, int param2, int param3, string key);
[DllImport("dcrf32.dll", EntryPoint = "dc_authentication",//扇区权限认证
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Authentication(int param1, int param2, int param3);
[DllImport("dcrf32.dll", EntryPoint = "dc_read",//读取卡号
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Read(int param1, int param2, byte[] param3);
[DllImport("dcrf32.dll", EntryPoint = "dc_read_hex")]
public static extern int d8ReadHex ( int icdev, int adr, StringBuilder sdata ); //从卡中读数据(转换为16进制)
[DllImport("dcrf32.dll", EntryPoint = "dc_beep",//读卡器蜂鸣
CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Beep(int param1, int param2);
[DllImport("RC5.dll", EntryPoint = "crypt",//内存复制
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern string crypt(byte[] param1, int param2, byte param3, byte param4);
[DllImport("dcrf32.dll", EntryPoint = "dc_exit",//关闭读卡IO
CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern Int16 d8Exit(int param1);
[DllImport("dcrf32.dll")]
public static extern void hex_a (ref string oldValue,ref string newValue,int len); //十六进制字符转换成普通字符
//华视读卡器
[DllImport("termb.dll")]
public static extern int CVR_InitComm (int port);
[DllImport("termb.dll")]
public static extern int CVR_Authenticate ();
[DllImport("termb.dll")]
public static extern int CVR_CloseComm ();
[DllImport("termb.dll")]
public static extern int CVR_Read_Content (int active);
//华大读卡器HD-100
[DllImport("SSSE32.dll")]
public static extern int ICC_Reader_Open ( string name);
//蜂鸣器
[DllImport("SSSE32.dll", EntryPoint = "ICC_PosBeep")]
public static extern System.Int32 ICC_PosBeep(System.Int32 ReaderHandle, Int16 time);
//将字符命令流转为16进制流
[DllImport("SSSE32.dll", EntryPoint = "StrToHex")]
public static extern System.Int32 StrToHex(System.Byte[] strIn, System.Int32 inLen, System.Byte[] strOut);
//密钥认证(模式一),该函数自动调用 存储 于 设备里面的 密钥 进行认证(要先装载密钥)
[DllImport("SSSE32.dll", EntryPoint = "PICC_Reader_Authentication")]
public static extern System.Int32 PICC_Reader_Authentication(System.Int32 ReaderHandle,System.Byte Mode,System.Byte SecNr);
//密钥认证(模式二),使用用户输入传入的 password
//注意:输入的是12位的密钥,例如12个f,但是password必须是6个字节的密钥,需要用StrToHex函数处理。
[DllImport("SSSE32.dll", EntryPoint = "PICC_Reader_Authentication_Pass")]
public static extern System.Int32 PICC_Reader_Authentication_Pass(System.Int32 ReaderHandle,System.Byte Mode,System.Byte SecNr,System.Byte[] PassWord);
//读卡
[DllImport("SSSE32.dll", EntryPoint = "PICC_Reader_Read")]
public static extern System.Int32 PICC_Reader_Read(System.Int32 ReaderHandle, System.Byte Addr,System.Byte[] Data);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_InitComm")]
public extern static int SNBC_InitComm(int port);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_CloseComm")]
public extern static int SNBC_CloseComm(int port);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_Authenticate")]
public extern static int SNBC_Authenticate();
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_ReadContent")]
public extern static int SNBC_ReadContent();
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_SavePhoto")]
public extern static int SNBC_SavePhoto(string name);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetName")]
public extern static int SNBC_GetName(byte[] strName, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetSex")]
public extern static int SNBC_GetSex(byte[] strSex, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetBirth")]
public extern static int SNBC_GetBirth(byte[] strBirth, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetNation")]
public extern static int SNBC_GetNation(byte[] strNation, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetID")]
public extern static int SNBC_GetID(byte[] strID, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetAddress")]
public extern static int SNBC_GetAddress(byte[] strAddress, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetDepartment")]
public extern static int SNBC_GetDepartment(byte[] strDepartment, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetISSUE")]
public extern static int SNBC_GetISSUE(byte[] strISSUE, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetEXPIRES")]
public extern static int SNBC_GetEXPIRES(byte[] strEXPIRES, int len);
[DllImport(@"BY618_108.dll", EntryPoint = "SNBC_GetNewAddress")]
public extern static int SNBC_GetNewAddress(byte[] strNewAddress, int len);
//深圳市明泰智能技术有限公司-URF-R330
[DllImport("mwrf32.dll", EntryPoint="rf_init")]
public static extern int rf_init(Int16 port, int baud);
[DllImport("mwrf32.dll", EntryPoint="rf_beep")]
public static extern int rf_beep(int icdev, int _Msec);
[DllImport("mwrf32.dll", EntryPoint="rf_exit")]
public static extern int rf_exit(int icdev);
[DllImport("mwrf32.dll", EntryPoint="rf_load_key")]
public static extern Int16 rf_load_key(int icdev,int mode, int secnr,[MarshalAs(UnmanagedType.LPArray)]byte[] keybuff );
[DllImport("mwrf32.dll", EntryPoint="rf_authentication")]
public static extern Int16 rf_authentication(int icdev, int mode,int secnr);
[DllImport("mwrf32.dll", EntryPoint="rf_reset")]
public static extern Int16 rf_reset(int icdev,int msec);
[DllImport("mwrf32.dll", EntryPoint="rf_request")]
public static extern Int16 rf_request(int icdev, int mode, out UInt16 tagtype);
[DllImport("mwrf32.dll", EntryPoint="rf_anticoll")]
public static extern Int16 rf_anticoll(int icdev, int bcnt,out uint snr);
[DllImport("mwrf32.dll", EntryPoint="rf_select")]
public static extern Int16 rf_select(int icdev, uint snr,out byte size);
[DllImport("mwrf32.dll", EntryPoint="rf_read")]
public static extern Int16 rf_read(int icdev,int blocknr, [MarshalAs(UnmanagedType.LPArray)]byte[] databuff);
[DllImport("mwrf32.dll", EntryPoint="hex_a")]
public static extern Int16 hex_a2([MarshalAs(UnmanagedType.LPArray)]byte[] hex,[MarshalAs(UnmanagedType.LPArray)]byte[] asc, int len );
//湖南长城医疗科技有限公司 GWI-IC30A
[DllImport("GWI_DesktopCardReader.dll", EntryPoint="GWI_M1Card_Open")]
public static extern int GWI_M1Card_Open(StringBuilder msg);
[DllImport("GWI_DesktopCardReader.dll", EntryPoint="GWI_M1Card_Close")]
public static extern int GWI_M1Card_Close(StringBuilder msg);
[DllImport("GWI_DesktopCardReader.dll", EntryPoint="GWI_M1Card_ReadID")]
public static extern int GWI_M1Card_ReadID(StringBuilder CardID, StringBuilder msg);
[DllImport("GWI_DesktopCardReader.dll", EntryPoint="GWI_M1Card_HexReadBlock")]
public static extern int GWI_M1Card_HexReadBlock(int sector, int blockid, int pwdmode,ref char output, char[] PassWord, StringBuilder msg);
[DllImport("GWI_DesktopCardReader.dll", EntryPoint="GWI_M1Card_ReadBlock")]
public static extern int GWI_M1Card_ReadBlock(int sector, int blockid, int pwdmode, StringBuilder Outbuf, char[] PassWord, StringBuilder msg);
// 滦平县妇幼保健院 GWI-IC30A
public string getVcCardGWI_IC30A() {
int status = -1, handle;
string result = "{\"code\":\"-1\"}";
StringBuilder msg = new StringBuilder(100);
StringBuilder temp = new StringBuilder(100);
char[] hexkey = new char[]{'F','F','F','F','F','F','F','F','F','F','F','F'};
handle = GWI_M1Card_Open(msg);
if(0 == handle) {
handle = GWI_M1Card_ReadID( msg, msg);
handle = GWI_M1Card_ReadBlock(1, 1, 0, temp, hexkey, msg);
if(0 == handle) {
result = "{\"code\":\"1\", \"id\":\"" + temp.ToString() + "\"}";
GWI_M1Card_Close( msg);
}
}
return result;
}
// 深圳市明华奥汉科技股份有限公司-URF-35LT-N ---承德市妇幼保健院
public string getVcCardURF_R35LT() {
int status = -1, handle;
string result = "{\"code\":\"-1\"}";
handle = rf_init(0,9600);
if(handle > 0) {
rf_beep(handle, 10);
uint snr=0;
byte size = 0;
byte[] hexkey = new byte[6]{0xff,0xff,0xff,0xff,0xff,0xff};
UInt16 tagtype=0;
status = rf_request(handle, 1, out tagtype);
status = rf_anticoll(handle,0,out snr);
status = rf_select(handle,snr,out size);
status = rf_load_key(handle, 0, 0, hexkey);
if(0 == status) {
status = rf_authentication(handle, 0, 0);
if(0 == status) {
byte[] data=new byte[4];
rf_read(handle, 0, data);
string hex = "";
for(int i=3; i>=0 ; i--) {
hex += data[i].ToString("x2");
}
Int32 cardNo = Int32.Parse(hex, System.Globalization.NumberStyles.HexNumber);
result = "{\"code\":\"1\", \"id\":\"" + cardNo + "\"}";
}
}
rf_exit(handle);
}
return result;
}
// 深圳市明泰智能技术有限公司-URF-R330---邢台市巨鹿医院
public string getVcCardURF_R330() {
int status = -1, handle;
string result = "{\"code\":\"-1\"}";
handle = rf_init(0,9600);
if(handle > 0) {
rf_beep(handle, 10);
uint snr=0;
byte size = 0;
byte[] hexkey = new byte[6]{0xff,0xff,0xff,0xff,0xff,0xff};
UInt16 tagtype=0;
status = rf_request(handle, 1, out tagtype);
status = rf_anticoll(handle,0,out snr);
status = rf_select(handle,snr,out size);
status = rf_load_key(handle, 0, 1, hexkey);
if(0 == status) {
status = rf_authentication(handle, 0, 1);
if(0 == status) {
byte[] data=new byte[16];
byte[] buff=new byte[16];
rf_read(handle, 4, data);
hex_a2(data,buff,16);
string cardno = System.Text.Encoding.ASCII.GetString(buff).Substring(0,12);
result = "{\"code\":\"1\", \"id\":\"" + cardno + "\"}";
}
}
rf_exit(handle);
}
return result;
}
// 威海新北洋数码有限公司 by618-108
public string getIdCard_by618108() {
int ret;
string result = "{\"code\":\"-1\"}";
ret = SNBC_InitComm(1001);//打开USB口1
if (ret == 0) {
ret = SNBC_Authenticate();
if (ret == 0x00) {
ret = SNBC_ReadContent();//关闭USB口1
if (ret == 0x00) {
string tmp = "{\"code\":1,";
byte[] buffer = new byte[70 + 1];
//获取姓名
SNBC_GetName(buffer, 30);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');
tmp += "\"name\":\"" + result + "\",";
//性别
buffer = new byte[70 + 1];
SNBC_GetSex(buffer, 2);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
tmp += "\"sex\":\"" + result + "\",";
//民族
buffer = new byte[70 + 1];
SNBC_GetNation(buffer, 20);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
tmp += "\"nation\":\"" + result + "\",";
//出生年月
buffer = new byte[70 + 1];
SNBC_GetBirth(buffer, 18);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
result = result.Substring(0,4) + "-" + result.Substring(4,2) + "-" + result.Substring(6,2);
tmp += "\"birth\":\"" + result + "\",";
//证件ID
buffer = new byte[70 + 1];
SNBC_GetID(buffer, 18);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
tmp += "\"id\":\"" + result + "\",";
//住址
buffer = new byte[70 + 1];
SNBC_GetAddress(buffer, 70);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
tmp += "\"address\":\"" + result + "\",";
//签发机构
buffer = new byte[70 + 1];
SNBC_GetDepartment(buffer, 30);
result = Encoding.Default.GetString(buffer).TrimEnd('\0');;
tmp += "\"office\":\"" + result + "\"";
tmp += "}";
result = tmp;
}
}
}
return result;
}
//华大读卡器HD-100 南丘县人民医院
public string Get_HuaDaHd_100_2() {
string result = "{\"code\":\"-1\"}", name = "USB1";
int handle = 0;
handle = ICC_Reader_Open( name);
byte[] Data = new byte[16];//存 读出的数据
if(handle > 0) {
ICC_PosBeep(handle, 1000);
string str = "ffffffffffff";//界面输入的 12位密钥
//密钥需要 从 字符串 类型 转换为 byte数组 类型
byte[] data = Encoding.UTF8.GetBytes(str);//string ---> byte[]
byte[] dataOut = new byte[6];//存 处理后 输出来的 密钥(6个字节的)
int test = StrToHex(data, 12, dataOut);//将字符命令流转为16进制流
int tt = PICC_Reader_Authentication_Pass(handle, 0x61 , 4, dataOut);
//使用参数PassWord传入的Key进行认证;
string result2 = "";
//认证成功
if (tt == 0) {
int tmp = -1;
tmp = PICC_Reader_Read(handle, 17, Data);//读(HEX)
if(tmp == 0) {
for ( int i = 1; i < 11; i++ ) {
result2 += (char)Data[i];
}
result = "{\"code\":\"1\", \"id\":\"" + result2 + "\"}";;
}
}
}
return result ;
}
//华大读卡器HD-100
public string Get_HuaDaHd_100() {
string result = "{\"code\":\"-1\"}", name = "USB1";
int handle = 0;
handle = ICC_Reader_Open( name);
byte[] Data = new byte[16];//存 读出的数据
if(handle > 0) {
ICC_PosBeep(handle, 1000);
string str = "ffffffffffff";//界面输入的 12位密钥
//密钥需要 从 字符串 类型 转换为 byte数组 类型
byte[] data = Encoding.UTF8.GetBytes(str);//string ---> byte[]
byte[] dataOut = new byte[6];//存 处理后 输出来的 密钥(6个字节的)
int test = StrToHex(data, 12, dataOut);//将字符命令流转为16进制流
int tt = PICC_Reader_Authentication_Pass(handle, 0x61 , (byte)(Convert.ToByte("08")/4), dataOut);
//使用参数PassWord传入的Key进行认证;
string result2 = "";
//认证成功
if (tt == 0) {
int tmp = PICC_Reader_Read(handle, Convert.ToByte("08"), Data);//读(HEX)
if(0 == tmp) {
for ( int i = 0; i < Data.Length; i++ ) {
if(Data[i] != 0 && i < 10) {
result2 += (char)Data[i];
}
}
}
result = "{\"code\":\"1\", \"id\":\"" + result2 + "\"}";;
}
}
return result ;
}
//华视身份证读卡器CVR-100UC //北京金诚信齐通科技有限公司 型号号GHC860
public string Get_HuaShiCardNo() {
int status = 0; string result = "{\"code\":\"-1\"}"; string tmp = "{code:99}"; string[] tmp2;
status = CVR_InitComm(1001);
if(status == 1) {
status = CVR_Authenticate();
} else {
CVR_CloseComm();
}
if(status == 1) {
status = CVR_Read_Content(0);
} else {
CVR_CloseComm();
}
if(status == 1)
status = CVR_CloseComm();
string path = System.Environment.CurrentDirectory + Path.DirectorySeparatorChar + "wz.txt";
if(File.Exists(path)) {
tmp = System.IO.File.ReadAllText(path, Encoding.Default);
tmp2 = tmp.Split(new String[]{"\r\n"}, StringSplitOptions.None);
if(tmp2.Length == 9) {
result = "{\"code\":\"1\", \"name\":\"" + tmp2[0] + "\", \"sex\":\"" + tmp2[1] + "\", \"nation\":\"" + tmp2[2] + "\", \"birth\":\""+ tmp2[3] +
"\", \"address\":\"" + tmp2[4] + "\", \"id\":\"" + tmp2[5] + "\", \"office\":\"" + tmp2[6] + "\", \"vailddate\":\"" + tmp2[7] + "\"}";
}
}
return result;
}
//深圳市德卡科技有限公司 D3
//-聊城东昌妇女儿童医院
public string Get_d3CardNo() {
int rCode = -1;
ulong handel = 0;
//初始化读卡
int initCode = d8Init(100, 115200);
byte[] rdata = new byte[64];
string result = null;
StringBuilder temp = new StringBuilder(64);
if(initCode >= 0) {
//配置读卡器
rCode = d8ConfigCard(initCode, 65);
//查询卡的内部卡号
rCode = d8Card(initCode, 0, ref handel);
if(rCode >= 0) {
byte[] hexkey = new byte[6]{0xff,0xff,0xff,0xff,0xff,0xff};
//加载卡扇区密码
rCode = d8LoadKey(initCode, 0 ,8 , hexkey);
if(rCode >= 0) {
//对密码进行认证
rCode = d8Authentication(initCode, 0, 6);
if(rCode >= 0) {
//读卡
rCode = d8ReadHex(initCode, 24, temp);
//蜂鸣
d8Beep(initCode, 10);
//释放IO
d8Exit(initCode);
result = temp.ToString();
if(!String.IsNullOrEmpty(result)) {
return "{\"code\":\"1\", \"id\":\"" + result.Substring(0, 10) + "\"}";
}
}
}
}
}
return "{\"code\":\"-1\"}";
}
//深圳市德卡科技有限公司 D8
public string Get_d8CardNo() {
Int16 rCode = -1;
ulong handel = 0;
//初始化读卡
int initCode = d8Init(100, 115200);
byte[] rdata = new byte[64];
string result = null;
if(initCode >= 0) {
//配置读卡器
rCode = d8ConfigCard(initCode, 65);
//查询卡的内部卡号
rCode = d8Card(initCode, 0, ref handel);
if(rCode >= 0) {
byte[] hexkey = new byte[6]{0xff,0xff,0xff,0xff,0xff,0xff};
//加载卡扇区密码
rCode = d8LoadKey(initCode, 0 ,8 , hexkey);
if(rCode >= 0) {
//对密码进行认证
rCode = d8Authentication(initCode, 0, 8);
if(rCode >= 0) {
//读卡
rCode = d8Read(initCode, 32, rdata);
//蜂鸣
d8Beep(initCode, 10);
//释放IO
d8Exit(initCode);
if(rCode >= 0) {
result = crypt(rdata, 16, 0, 0);
if(!String.IsNullOrEmpty(result)) {
return "{\"code\":\"1\", \"id\":\"" + result + "\"}";
}
}
}
}
}
}
return "{\"code\":\"-1\"}";
}
//天津环球磁卡股份有限公司 GMCC-DC001
public string Get_CMCCDC001CardNo() {
StringBuilder Cardno = new StringBuilder(8000);
StringBuilder RetMsg = new StringBuilder(8000);
int Ret_code = 9;
string Ret_msg = "-1";
try {
Ret_code = __Get_CardNo(ref Cardno, ref RetMsg);
} catch (Exception e) {
Ret_msg = RetMsg.ToString();
}
//读卡成功
if (Ret_code == 0) {
Ret_msg = Cardno.ToString();
return "{\"code\":\"1\", \"id\":\"" + Ret_msg + "\"}";
}
return "{\"code\":\"-1\"}";
}
//获取健康卡或者社保卡,天津环球磁卡股份有限公司 GMCC-DC001
public int __Get_CardNo(ref StringBuilder CardNo, ref StringBuilder Info) {
int type1 = 0;
int type2 = 0;
StringBuilder card = new StringBuilder(8000);
StringBuilder err = new StringBuilder(8000);
type1 = __Get_JKK_CardNo(ref card, ref err);
if (type1 == 0) {
Info.Append("JJK_OK");
CardNo = card;
return 0;
}
type2 = __Get_YB_CardNo(ref card, ref err);
if (type2 == 0) {
Info.Append("SBK_OK");
CardNo = card;
return 0;
} else {
Info = err;
return -1;//读卡失败
}
}
//读取健康卡,天津环球磁卡股份有限公司 GMCC-DC001
public int __Get_JKK_CardNo(ref StringBuilder CardInfo, ref StringBuilder ErrInfo) {
int status = 0;
StringBuilder ErrMSG = new StringBuilder(1000);
StringBuilder Card = new StringBuilder(3000);
status = QHD_OpenPort(ErrMSG);
if (status != 0) {
ErrInfo = ErrMSG;
QHD_ClosePort(ErrMSG);
return -1;//找不到读卡器
} else {
//getKeyA
status = QHD_ReadCard(Card, ErrMSG);
if (status == 0) {
String regular = @" ([0-9]{10}) ";
MatchCollection mc = Regex.Matches(Card.ToString(), regular);
if (0 != mc.Count) {
CardInfo = new StringBuilder(mc[0].ToString().Trim());
}
QHD_ClosePort(ErrMSG);
return 0;//读卡成功
} else {
ErrMSG = ErrInfo;
QHD_ClosePort(ErrMSG);
return -2;//读卡失败
}
}
}
//读取医保卡,天津环球磁卡股份有限公司 GMCC-DC001
public int __Get_YB_CardNo(ref StringBuilder CardNum, ref StringBuilder ErrInfo) {
int status = 0;
IntPtr handel = new IntPtr();
StringBuilder ErrMSG = new StringBuilder(1000);
StringBuilder CardNo = new StringBuilder(3000);
StringBuilder IdNo = new StringBuilder(3000);
StringBuilder Name = new StringBuilder(3000);
status = iDOpenPort(0, ref handel, ErrMSG);
//int str = 0;
if (status == 0) {
//status = getKeyA(handel, 1, str);
status = getCardNO_Ext(handel, CardNo, IdNo, Name, ErrMSG);
if (status == 0) {
CardNum = ErrMSG;
string[] l = CardNo.ToString().Split('|');//用,分组
CardNum = new StringBuilder(l[0]);
status = iDCloseReader(handel, ErrMSG);
ErrInfo = ErrMSG;
return 0;//读卡成功
} else {
status = iDCloseReader(handel, ErrMSG);
ErrInfo = ErrMSG;
return -2;//读卡失败
}
} else {
status = iDCloseReader(handel, ErrMSG);
ErrInfo = ErrMSG;
return -1;//读卡器未找到
}
}
}
}