身份证读取api

 public class IDCardAPI
    {

        private const string ApiPath = "widapi.dll";
        //private const string ApiPath = "widapi_x64.dll";

        // 初始化端口,port:USB: 1001~1006, 串口:1~16  返回1成功,<0失败
        [DllImport(ApiPath, EntryPoint = "InitComm", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int InitComm(int port);

        // 查找并初始化端口,打开成功时返回 USB: 1001~1006, 串口:1~16, <0失败
        [DllImport(ApiPath, EntryPoint = "InitCommExt", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int InitCommExt();

        // 关闭端口,返回1成功,0失败
        [DllImport(ApiPath, EntryPoint = "CloseComm", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int CloseComm();

        // 读取安全模块编号,预分配64字节空间
        [DllImport(ApiPath, EntryPoint = "GetSAMIDToStr", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int GetSAMIDToStr(byte[] samID);

        // 身份证卡认证,1--卡认证成功,<0认为失败
        [DllImport(ApiPath, EntryPoint = "Authenticate", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int Authenticate();

        // 读文字信息   readNewAddress: 0x01--额外读取最新地址信息,0x00--不读取最新地址。
        //       directoryPath--保存photo相片文件的路径,为null表示不生成相片图像文件。
        // 返回:1--成功,<0失败
        [DllImport(ApiPath, EntryPoint = "ReadBaseMsgData", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int ReadBaseMsgData(int readNewAddress, string directoryPath, ref IDCARDPERSONINFO personinfo);


        // 读文字信息及指纹信息  readNewAddress: 0x01--额外读取最新地址信息,0x00--不读取最新地址。
        //       directoryPath--保存photo相片文件的路径,为null表示不生成相片图像文件。
        // 返回:1--成功,<0失败
        [DllImport(ApiPath, EntryPoint = "ReadBaseFPMsgData", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int ReadBaseFPMsgData(int readNewAddress, string directoryPath, ref IDCARDPERSONINFO personinfo);


        // 读最新地址信息  newAddress--预分配72字节空间,返回1成功,<0失败
        [DllImport(ApiPath, EntryPoint = "ReadNewAddress", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int ReadNewAddress(byte[] newAddress);

        // 解码相片数据  wltData--原始相片文件,destDataType --目标数据类型,1--24位色bmp文件
        //        destFilePath--目标图像文件路径,为null表示不生成图像文件,
        //        destBuf--目标图像数据,需预分配足够大小的空间,建议分配60 * 1024字节的缓冲区,为null表示不生成图像数据
        //        destBufLen--传入预分配的缓冲区大小,返回实际数据大小。
        //    返回1成功,<0失败
        [DllImport(ApiPath, EntryPoint = "DecodeWltData", CharSet = CharSet.Ansi, SetLastError = false)]
        public static extern int DecodeWltData(byte[] wltData, int destDataType, string destFilePath, byte[] destBuf, ref int destBufLen);
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
    public struct IDCARDPERSONINFO64
    {
        public int iCardType;//卡片类型  1-居民身份证  2-外国人永久居住证  3-港澳通行证

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string name;      // 姓名
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string sex;      // 性别,汉字表示
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string nation;   // 民族,汉字表示
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string birthdate;    // 出生年月日 格式yyyymmdd
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]
        public string address;      // 住址
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string idCode;       // 公民身份代码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string agency;       // 签发机关
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string validBegin;   // 有效期限起,格式yyyymmdd
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string validEnd;     // 有效期限止,格式yyyymmdd或“长期”
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]
        public string newAddress;   // 最新住址
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string sexCode;      // 性别代码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string nationCode;   // 民族代码
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] wzData;       // 原始机读文字信息
        public int wzDataLen;       // 原如机读文字信息长度
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] fpData;       // 原始机读指纹信息
        public int fpDataLen;       // 原始机读指纹信息长度,-1表示该阅读器不支持指纹信息的读取
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] wltData;      // 原始机读相片信息
        public int wltDataLen;      // 原始机读相片信息长度

        //2.外国人居留证数据(iCardType=2)
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 120)]
        public string szfname;//姓名
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string szfsex;//性别
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
        public string szfID;//永久居留证号码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string szfnation;//国籍代码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
        public string szfcnName;//中文姓名
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szfusefulBegin;//证件签发日期
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szfusefulEnd;//证件终止日期
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szfbirthday;//出生日期
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string szfver;//证件版本号
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string szforgan;//当次申请受理机关代码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
        public string szfflag;//证件类型标志
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string szfReserve;//预留项

        //3.港澳台居住证数据(iCardType=3)
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
        public string szHMTName;//姓名
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string szHMTSex;//性别
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string szHMTRes1;//预留
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szHMTBirthday;//生日
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 70)]
        public string szHMTAddr;//住址
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
        public string szHMTID;//身份证号码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
        public string szHMTOrgan;//签发机关
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szHMTBegindate;//有效期起始日期起
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szHMTEndDate;//有效期截止日期
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]
        public string szHMTPassCode;//通行证号码
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string szHMTSignFrequency;//签发次数
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string szHMTRes2;//预留区
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
        public string szHMTFlag;//证件类型标志
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
        public string szHMTRes3;//预留区
    }


    [StructLayout(LayoutKind.Sequential, Pack = 4)]
    public struct IDCARDPERSONINFO
    {
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string name;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
        public string sex;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string nation;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string birthdate;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]
        public string address;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
        public string idCode;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string agency;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string validBegin;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
        public string validEnd;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]
        public string newAddress;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string sexCode;

        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
        public string nationCode;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] wzData;

        public int wzDataLen;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] fpData;

        public int fpDataLen;

        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
        public byte[] wltData;

        public int wltDataLen;
    }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值