This commit is contained in:
2026-03-31 08:51:00 +08:00
commit 12d21c4c90
71 changed files with 4529 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,170 @@
package com.sdses;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
public class BlueTooth
{
private static UUID SS_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static BluetoothAdapter mAdapter = null;
private static BluetoothDevice mDevice = null;
private static BluetoothSocket mSocket = null;
private static InputStream mInputStream = null;
private static OutputStream mOutputStream = null;
public static long BthConnect(String BlueToothName)
{
mAdapter = BluetoothAdapter.getDefaultAdapter();
if (mAdapter == null)
{
return -1;
}
if (!mAdapter.isEnabled())
{
return -2;
/*
mAdapter.enable();
if (!mAdapter.isEnabled())
{
return -2;
}
*/
}
//获得已配对的蓝牙设备列表
Set<BluetoothDevice> pairedDevices = mAdapter.getBondedDevices();
if(pairedDevices.size() <= 0)
{
return -3;
}
ArrayList<BluetoothDevice> ALBluetoothDevice = new ArrayList<BluetoothDevice>();
for (BluetoothDevice device : pairedDevices)
{
ALBluetoothDevice.add(device);
}
//mAdapter.cancelDiscovery();
//查找设备
for(int i = 0; i < ALBluetoothDevice.size(); i++)
{
BluetoothDevice cDevice = (BluetoothDevice)ALBluetoothDevice.get(i);
String theBlueToothName = cDevice.getName();
if(theBlueToothName.indexOf(BlueToothName) < 0)
{
continue;
}
//开始连接设备
mDevice = cDevice;
try
{
mSocket = mDevice.createRfcommSocketToServiceRecord(SS_UUID);
mSocket.connect();
mInputStream = mSocket.getInputStream();
mOutputStream = mSocket.getOutputStream();
return 0;
}
catch (Exception e)
{
return -4;
}
}
return -5; //没有配对设备
}
public static long BthSendSocket(byte[] buffer, int len)
{
if(mOutputStream == null)
{
return -1;
}
try
{
mOutputStream.write(buffer, 0, len);
}
catch (IOException e)
{
return -2;
}
return len;
}
public static long BthRecvSocket(byte[] buffer)
{
if(mInputStream == null)
{
return -1;
}
try
{
// int nAvailable = mInputStream.available();
// if(nAvailable <= 0)
// {
// return 0;
// }
return mInputStream.read(buffer, 0, 4096);
}
catch (IOException e)
{
return -2;
}
}
public static void BthDisconnect()
{
if(mInputStream != null)
{
try
{
mInputStream.close();
mInputStream = null;
}
catch (IOException e)
{
return;
}
}
if(mOutputStream != null)
{
try
{
mOutputStream.close();
mOutputStream = null;
}
catch (IOException e)
{
return;
}
}
if(mSocket != null)
{
try
{
mSocket.close();
mSocket = null;
}
catch (IOException e)
{
return;
}
}
}
}

View File

@@ -0,0 +1,122 @@
package com.sdses;
import android.content.Context;
public class JniCommonInterface
{
static
{
System.loadLibrary("WltRS");
System.loadLibrary("PortCommunication");
System.loadLibrary("TerminalProtocol");
System.loadLibrary("CommonInterface");
}
public static long GetUsbPermission(Context ctx, int Vid, int Pid)
{
return UsbHidPort.GetUsbPermission(ctx, Vid, Pid);
}
public static native long SetLogFileEx(String LogFileName);
public static native long SetTerminalLibrary(String LibraryFileName);
public static native long GetLibraryInfo(byte[] Version, byte[] Description);
public static native long SetAutoPara(String PortType, String PortPara, String ExtendPara, String DllName, int UsingGA467);
public static native long OpenDevice(String PortType, String PortPara, String ExtendPara);
public static native long SetCurrentDevice(long DevHandle);
public static native long GetCurrentDevice();
public static native long CloseDevice();
public static native long CommandTransmit(long Command, long CmdDataLength, byte[] CmdData, byte[] StatusWords, long[] RecvDataLength, byte[] RecvData, long TimeOut);
public static native long GA467Transmit(long Command, long CmdDataLength, byte[] CmdData, byte[] StatusWords, long[] RecvDataLength, byte[] RecvData, long TimeOut);
public static native long TerminalGetModel(byte[] TerminalModel);
public static native long TerminalGetFirmVersion(byte[] FirmVersion, byte[]HardwareVersion);
public static native long TerminalHeartBeat();
public static native long LedOnOff(byte LedNo, byte OnOff);
public static native long LedBlink(byte LedNo, long OnTimeMs, long OffTimeMs, byte BlinkCount, byte FinalState);
public static native long GetLastRecvData(byte[] LastRecvData);
public static native long IdFindCard();
public static native long IdSelectCard();
public static native long IdReadBaseMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen);
public static native long IdReadBaseFpMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen, byte[] pucFPMsg, long[] puiFPMsgLen);
public static native long IdReadNewAppMsg(byte[] pucAppMsg, long[] puiAppMsgLen);
public static native long IdReadSn(byte[] SN, long[] SNLen);
public static native long IdApdu(long SendApduLen, byte[] SendApdu, byte[] RecvApdu, long[] RecvApduLen);
public static native long SdtFindCard(byte[] pucManaInfo);
public static native long SdtSelectCard(byte[] pucManaMsg);
public static native long SdtReadBaseMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen);
public static native long SdtReadBaseFpMsg(byte[] pucCHMsg, long[] puiCHMsgLen, byte[] pucPHMsg, long[] puiPHMsgLen, byte[] pucFPMsg, long[] puiFPMsgLen);
public static native long SdtReadNewAppMsg(byte[] pucAppMsg, long[] puiAppMsgLen);
public static native long SamGetStatus();
public static native long SamGetId(byte[] SamId, long[] SamIdLen);
public static native long SamGetIdStr(byte[] SamIdStr);
public static native long SdtSamGetStatus();
public static native long SdtSamGetId(byte[] SamId, long[] SamIdLen);
public static native long SdtSamGetIdStr(byte[] SamIdStr);
public static native long IdReadCard(byte CardType, byte InfoEncoding, byte[] IdCardInfo, long TimeOutMs);
public static native long SdtReadCard(byte CardType, byte InfoEncoding, byte[] IdCardInfo, long TimeOutMs);
public static native long IdReadNewAddress(byte[] NewAddress);
public static native long SdtReadNewAddress(byte[] NewAddress);
public static native long IdCardGetName(byte[] Name);
public static native long IdCardGetNameEn(byte[] NameEn);
public static native long IdCardGetGender(byte[] Gender);
public static native long IdCardGetGenderId(byte[] GenderId);
public static native long IdCardGetNation(byte[] Nation);
public static native long IdCardGetNationId(byte[] NationId);
public static native long IdCardGetBirthDate(byte[] BirthDate);
public static native long IdCardGetAddress(byte[] Address);
public static native long IdCardGetIdNumber(byte[] IdNumber);
public static native long IdCardGetSignOrgan(byte[] SignOrgan);
public static native long IdCardGetBeginTerm(byte[] BeginTerm);
public static native long IdCardGetValidTerm(byte[] ValidTerm);
public static native long IdCardGetFPBuffer(byte[] FPBuffer, long[] FPBufferLen);
public static native long IdCardGetPhotoFile(String PhotoFile);
public static native long IdCardGetPhotoBuffer(byte WltBmpJpg, byte[] PhotoBuffer, long[] PhotoBufferLen);
public static native long MIdSamGetCert(byte[] Cert, long[] CertLen);
public static native long MIdSamEnable(long EnableDataLen, byte[] EnableData);
public static native long MIdSamDisable(long DisableDataLen, byte[] DisableData);
public static native long MIdSamGetEnableState(byte[] EnableState, long[] RemainNum, byte[] EnableTime, byte[] DisableTime, byte[] SecondCert, long[] SecondCertLen, byte[] EncryptCert, long[] EncryptCertLen, byte[] SignCert, long[] SignCertLen);
public static native long MIdSamAuthRequest(byte[] RequestData56);
public static native long MIdSamAuthConfirm(byte[] ConfirmData89);
public static native long MIdReadChkData(byte[] Random16, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] ShortCode16, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
public static native long MIdReadChkDataPF(byte[] Random16, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] ShortCode16, byte[] CheckData, long[] CheckDataLen, byte[] Hash32, byte[] Sign64, byte[] PH, long[] PHLen, byte[] FP, long[] FPLen);
public static native long MIdCheckShortLongCode(byte[] Random16, byte ShortCodeCount, byte[] ShortCode, byte LongCodeCount, byte[] LongCode, byte[] RemainAuthNum, byte[] SamId22, byte[] BeginAndValidTerm32, byte[] MatchCode, byte[] MatchCodeLen, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
public static native long MIdCheckShortLongCodePF(byte[] Random16, byte ShortCodeCount, byte[] ShortCode, byte LongCodeCount, byte[] LongCode, byte[] RemainAuthNum, byte[] SamId22,byte[] BeginAndValidTerm32, byte[] MatchCode, byte[] MatchCodeLen, byte[] CheckData, long[] CheckDataLen, byte[] Hash32, byte[] Sign64, byte[] PH, long[] PHLen, byte[] FP, long[] FPLen);
public static native long MIdCheckProperty(byte[] Random16, byte PropertyCode, byte PropertyValLen, byte[] PropertyVal, byte[] RemainAuthNum, byte[] SamId22, byte[] CheckResult, byte[] CheckData, long[] CheckDataLen, byte[] Sign64);
public static native long MagRead(byte Tracks, byte[] TrackData1, byte[] TrackData2, byte[] TrackData3, byte TimeOutSec);
public static native long MagWrite(byte Tracks, String TrackData1, String TrackData2, String TrackData3, byte TimeOutSec);
public static native long QrRead(byte[] QrData, byte TimeOutSec);
public static native long QrCancel();
public static native long QrAsynEnable(byte TimeOutSec);
public static native long QrAsynRead(byte[] QrData);
public static native long QrAsynDisable();
public static native long M1FindCard(byte[] UID, long[] UIDLen);
public static native long M1Authentication(byte KeyType, byte SecAddr, byte[] Key, byte[] UID);
public static native long M1ReadBlock(byte BlockAddr, byte[] BlockData, long[] BlockDataLen);
public static native long M1WriteBlock(byte BlockAddr, long BlockDataLen, byte[] BlockData);
public static native long M1Halt();
public static native long FpCapFeature(byte[] Feature, long[] FeatureLen);
public static native long FpMatchFeature(long FeatureLen1, byte[] Feature1, long FeatureLen2, byte[] Feature2, long[] Score);
public static native long SsseReadCard(int iType, byte[] SSCardInfo, byte[] SSErrorInfo);
public static native long SsseReadCard2(int iType, byte[] SSCardInfo, byte[] SSErrorInfo);
public static native long SsseGetCardInfo(String Tag, byte[] SSCardInfo);
public static native long CpuPowerOn(byte Slot, byte[] ATRS, long[] ATRSLen);
public static native long CpuApdu(byte Slot, long SendApduLen, byte[] SendApdu, byte[] RecvApdu, long[] RecvApduLen);
public static native long CpuPowerOff(byte Slot);
public static native long IccGetCardInfo(int ICtype, String AIDList, String TagList, byte[] IcCardInfo);
public static native long IccGetARQC(int ICtype, String trData, String AIDList, byte[] ARQC, byte[] trAppData);
public static native long IccARPCExeScript(int ICtype, String trData, String ARPC, String trAppData, byte[] ScriptResult, byte[] TC);
public static native long IccGetTrDetail(int ICtype, String AIDList, byte[] TrDetail);
public static native long IccGetLoadDetail(int ICtype, String AIDList, byte[] LoadDetail);
public static native long HexToAsc(byte[] Hex, long HexLength, byte[] Asc);
public static native long AscToHex(String Asc, long HexLength, byte[] Hex);
}

View File

@@ -0,0 +1,273 @@
package com.sdses;
import java.util.HashMap;
import java.util.Iterator;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
public class UsbHidPort
{
private static final String ACTION_USB_PERMISSION = "com.sdses.JniCommonInterface.USB_PERMISSION";
private static final BroadcastReceiver mUsbReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (action.equals(ACTION_USB_PERMISSION))
{
synchronized (this)
{
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
{
if (device != null)
{
}
}
else
{
}
}
}
}
};
public static UsbManager usbManager = null;
public static UsbDevice usbDevice = null;
public static UsbInterface usbInterface = null;
public static UsbDeviceConnection usbConnection = null;
public static UsbEndpoint epOut;
public static UsbEndpoint epIn;
public static int SendBlockSize = 0;
public static int RecvBlockSize = 0;
public static synchronized long GetUsbPermission(Context ctx, int Vid, int Pid)
{
try
{
usbManager = (UsbManager)ctx.getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
usbDevice = null;
while (deviceIterator.hasNext())
{
UsbDevice device = deviceIterator.next();
if ((device.getVendorId() == Vid) && (device.getProductId() == Pid))
{
usbDevice = device;
break;
}
}
if (usbDevice == null)
{
return -1;
}
if(usbDevice.getInterfaceCount() <= 0)
{
return -2;
}
usbInterface = usbDevice.getInterface(0);
if(usbInterface == null)
{
return -2;
}
// 判断是否有权限
if(!usbManager.hasPermission(usbDevice))
{
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(ctx, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter permissionFilter = new IntentFilter(ACTION_USB_PERMISSION);
ctx.registerReceiver(mUsbReceiver, permissionFilter);
usbManager.requestPermission(usbDevice, mPermissionIntent);
System.out.print("Requesting Usb Permission");
while(!usbManager.hasPermission(usbDevice))
{
}
}
return 0;
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static long UsbOpenPort(int Vid, int Pid)
{
try
{
if (usbDevice == null)
{
return -1;
}
usbConnection = usbManager.openDevice(usbDevice);
if(usbConnection == null)
{
return -1;
}
if(usbInterface == null)
{
return -2;
}
if(!usbConnection.claimInterface(usbInterface, true))
{
usbConnection.close();
usbConnection = null;
return -2;
}
for(int i = 0; i < usbInterface.getEndpointCount(); i++)
{
UsbEndpoint endPoint = usbInterface.getEndpoint(i);
switch(endPoint.getType())
{
case UsbConstants.USB_ENDPOINT_XFER_BULK:
case UsbConstants.USB_ENDPOINT_XFER_INT:
{
switch(endPoint.getDirection())
{
case UsbConstants.USB_DIR_OUT:
{
epOut = endPoint;
break;
}
case UsbConstants.USB_DIR_IN:
{
epIn = endPoint;
break;
}
}
break;
}
case UsbConstants.USB_ENDPOINT_XFER_CONTROL:
{
epOut = endPoint;
epIn = endPoint;
break;
}
}
}
SendBlockSize = epOut.getMaxPacketSize();
RecvBlockSize = epIn.getMaxPacketSize();
return SendBlockSize;
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static long UsbWrite(byte[] buffer, int len, int timeout)
{
try
{
return usbConnection.bulkTransfer(epOut, buffer, SendBlockSize, timeout);
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static long UsbRead(byte[] buffer, int timeout)
{
/*
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
try
{
return usbConnection.bulkTransfer(epIn, buffer, RecvBlockSize, timeout);
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static long UsbCtrlWrite(byte[] buffer, int len, int timeout)
{
try
{
return usbConnection.controlTransfer(0x21, 0x09, 0x0200, 0x0000, buffer, SendBlockSize, timeout);
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static long UsbCtrlRead(byte[] buffer, int timeout)
{
try
{
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return usbConnection.controlTransfer(0xA1, 0x01, 0x0100, 0x0000, buffer, RecvBlockSize, timeout);
}
catch(Exception ex)
{
ex.printStackTrace();
return -99;
}
}
public static void UsbClosePort()
{
try
{
usbConnection.releaseInterface(usbInterface);
usbConnection.close();
usbConnection = null;
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,201 @@
2.3.1 基本接口
2.3.1.1 打开设备
函数名称 打开设备
函数声明 long OpenDevice(char *PortType, char *PortPara, char *ExtendPara);
功能描述 与设备建立通讯连接,返回设备句柄。
参数说明 序号 参数 输入/输出 类型 含义
1 PortType IN 字符串 端口类型(详见参数补充说明)
2 PortPara IN 字符串 端口参数(详见参数补充说明)
3 ExtendPara IN 字符串 扩展参数(详见参数补充说明)
返回值 大于0表示成功数值为设备句柄其他为失败。
参数补充说明:
PortType PortPara ExtendPara
串口 COMn 或 1~1000 波特率9600、115200 串口扩展盒参数1B2541
USB USBn 或 1001~2000 VID_PID261A0011、261A0012 中断传输为MI 控制传输为MC
网口 SKT IP:端口192.168.0.1:8080
蓝牙 BTH 蓝牙名称SS728M801
自动 AUTO
注意事项:
1、COMn和USBn中n∈1~1000即COM1~COM1000(1~1000)和USB1~USB1000(1001~2000)
2、Linux/Android下串口传参为COM+串口文件路径例如COM/dev/ttyS4
3、端口类型为AUTO时是指各参数通过CommonInterface.ini配置文件获取用法详见附录C方案二。
神思USB读卡器的VID_PID对照表请参见附录B
2.3.1.2 关闭设备
函数名称 关闭设备
函数声明 long CloseDevice();
功能描述 断开与设备的通讯连接。
参数说明 序号 参数 输入/输出 类型 含义
返回值 0表示成功非0表示失败。
2.3.1.3 设置当前设备(多设备操作)
函数名称 设置当前设备
函数声明 long SetCurrentDevice(long DevHandle);
功能描述 一台PC连接多台读卡器时通过设备句柄设置接下来要操作的设备。
参数说明 序号 参数 输入/输出 类型 含义
1 PortHandle IN 长整型 设备句柄
返回值 0表示成功非0表示失败。
2.3.1.4 获取当前设备(多设备操作)
函数名称 获取当前设备
函数声明 long GetCurrentDevice();
功能描述 一台PC连接多台读卡器时获取当前操作的设备句柄。
参数说明 序号 参数 输入/输出 类型 含义
返回值 返回当前设备的句柄。
2.3.1.5 获取接口库信息
函数名称 获取接口库信息
函数声明 long GetLibraryInfo(char *Version, char * Description);
功能描述 获取当前已加载的接口库详细信息。
参数说明 序号 参数 输入/输出 类型 含义
1 Version OUT 字符串 接口库版本
2 Description OUT 字符串 接口库描述
返回值 0表示成功非0表示失败。
2.3.1.6 获取设备型号
函数名称 获取设备型号
函数声明 long TerminalGetModel(char *TerminalModel);
功能描述 获取读卡器的型号。
参数说明 序号 参数 输入/输出 类型 含义
1 TerminalModel OUT 字符串 设备型号
返回值 0表示成功非0表示失败。
2.3.1.7 设备轮询心跳
函数名称 设备轮询心跳
函数声明 long TerminalHeartBeat();
功能描述 与设备进行握手通讯,用于检测与读卡器是否已建立连接并且通讯正常。
参数说明 序号 参数 输入/输出 类型 含义
返回值 0表示成功非0表示失败。
2.3.1.8 获取接收数据
函数名称 获取接收数据
函数声明 long GetLastRecvData(unsigned char *LastRecvData);
功能描述 获取最后一次通讯收到的数据,一般用于获取读卡器协议层错误信息。
参数说明 序号 参数 输入/输出 类型 含义
1 LastRecvData OUT 字节数组 返回最后一次通讯收到的数据
返回值 返回收到的数据长度。
2.3.1.9 获取固件版本
函数名称 获取设备固件版本
函数声明 long TerminalGetFirmVersion(char *FirmVersion, char *HardwareVersion);
功能描述 获取读卡器的固件版本号。
参数说明 序号 参数 输入/输出 类型 含义
1 FirmVersion OUT 字符串 设备固件版本号
2 HardwareVersion OUT 字符串 设备硬件版本号
返回值 0表示成功非0表示失败。
2.3.1.10 获取设备序列号
函数名称 获取设备序列号
函数声明 long TerminalGetSn(char *TerminalSn);
功能描述 获取读卡器的固件版本号。
参数说明 序号 参数 输入/输出 类型 含义
1 TerminalSn OUT 字符串 设备序列号
返回值 0表示成功非0表示失败。
2.3.2 二代证接口(二代证/外国人/港澳台)
2.3.2.1 读取二代证
函数名称 读取二代证
函数声明 long IdReadCard(unsigned char CardType, unsigned char InfoEncoding, char *IdCardInfo,
long TimeOutMs);
long SdtReadCard(unsigned char CardType, unsigned char InfoEncoding, char *IdCardInfo,
long TimeOutMs);GA467协议
功能描述 读取第二代居民身份证或外国人永久居留证或港澳台居民居住证
参数说明 序号 参数 输入/输出 类型 含义
1 CardType IN 字节 读取卡类型
0x00 :读取二代证或外国人或港澳台
0x01 :只读二代证
0x02 :只读外国人
0x03 :只读港澳台
以上参数不含指纹信息
以下参数包含指纹信息
0x10 :读取二代证或外国人或港澳台 (含指纹)
0x11 :只读二代证(含指纹)
0x12 :只读外国人(含指纹)
0x13 :只读港澳台(含指纹)
2 InfoEncoding IN 字节 返回信息的编码方式
0x01 GB18030编码GBK
0x02 UTF16-LE编码
0x03 UTF-8编码
3 IdCardInfo OUT 字符串 读取到的二代证/外国人/港澳台信息
至少分配10240字节的内存
4 TimeOutMs IN 长整型 读卡超时时间,单位为毫秒
= 0 :不等待,无卡立即返回
> 0 :等待放卡,指定时间内等待放卡
返回值 0表示成功非0表示失败。
读卡返回信息IdCardInfo格式为以英文冒号分割的信息项具体如下
证件类型:中文姓名:英文姓名:性别:性别代码:民族:民族代码:出生日期:住址:身份证号码:签发机关:发卡日期:卡有效期:证件版本号:头像JPG照片base64编码:指纹特征值base64编码
以上信息为二代证、外国人、港澳台信息项的并集,如果当前类型的证件中不存在该项信息,则该项为空,具体证件中包含的信息项如下:
序号 信息项 二代证 外国人 港澳台 自动解析函数
0 证件类型 A I或Y J IdCardGetTypeFlag
1 中文姓名 姓名 中文姓名 姓名 IdCardGetName
2 英文姓名 英文姓名 IdCardGetNameEn
3 性别 性别 性别 性别 IdCardGetGender
4 性别代码 性别代码 性别代码 性别代码 IdCardGetGenderId
5 民族 民族 国籍或所在地区 IdCardGetNation
6 民族代码 民族代码 国籍或所在地区代码 通行证号码 IdCardGetNationId
7 出生日期 出生日期 出生日期 出生日期 IdCardGetBirthDate
8 住址 住址 /永久居留证号码关联项 住址 IdCardGetAddress
9 身份证号码 公民身份号码 永久居留证号码/证件号码 公民身份号码 IdCardGetIdNumber
10 签发机关 签发机关 当次申请受理机关代码 签发机关 IdCardGetSignOrgan
11 发卡日期 有效期
起始日期 证件签发日期 有效期
起始日期 IdCardGetBeginTerm
12 卡有效期 有效期
截止日期 证件终止日期 有效期
截止日期 IdCardGetValidTerm
13 证件版本号 证件版本号/换证次数 签发次数 IdCardGetVersion
14 头像JPG照片base64编码 头像照片base64编码 头像照片base64编码 头像照片base64编码
15 指纹特征值base64编码 指纹特征值base64编码 指纹特征值base64编码
各信息项建议通过拆分IdCardInfo字符串得到不建议使用以下函数获取
long IdCardGetName(char *Name);
long IdCardGetNameEn(char *NameEn);
long IdCardGetGender(char *Gender);
long IdCardGetGenderId(char *GenderId);
long IdCardGetNation(char *Nation);
long IdCardGetNationId(char *NationId);
long IdCardGetBirthDate(char *BirthDate);
long IdCardGetAddress(char *Address);
long IdCardGetIdNumber(char *IdNumber);
long IdCardGetSignOrgan(char *SignOrgan);
long IdCardGetBeginTerm(char *BeginTerm);
long IdCardGetValidTerm(char *ValidTerm);
long IdCardGetTypeFlag(char *TypeFlag);
long IdCardGetVersion(char *Version);
long IdCardGetFPBuffer(unsigned char *FPBuffer, long *FPBufferLen);//返回1024字节指纹信息两个手指
long IdCardGetPhotoFile(char *PhotoFile);//入参PhotoFile为生成头像文件的全路径支持扩展名wlt/bmp/jpg
long IdCardGetPhotoBuffer(unsigned char WltBmpJpg, unsigned char *PhotoBuffer, long *PhotoBufferLen);
WltBmpJpg入参0x01 wlt格式 0x02 bmp格式 0x03 jpg格式
//获取二代证原始信息
long IdCardGetRawInfo(unsigned char *CHMsg, long *CHMsgLen, //文字信息
unsigned char *PHMsg, long *PHMsgLen, //照片信息
unsigned char *FPMsg, long *FPMsgLen); //指纹信息
2.3.2.2 读取追加住址
函数名称 读取追加住址
函数声明 long IdReadNewAddress(char *NewAddress);
long SdtReadNewAddress(char *NewAddress); GA467协议
功能描述 读取二代证的追加住址信息
参数说明 序号 参数 输入/输出 类型 含义
1 NewAddress OUT 字符串 返回读取到的追加住址信息
返回值 0表示成功非0表示失败。
2.3.2.3 获取SAM模块状态
函数名称 获取SAM模块状态
函数声明 long SamGetStatus();
long SdtSamGetStatus();GA467协议
功能描述 获取公安部SAM安全模块状态。
参数说明 序号 参数 输入/输出 类型 含义
返回值 0表示成功非0表示失败。
2.3.2.4 获取SAM模块编号字符串
函数名称 获取SAM模块编号字符串
函数声明 long SamGetIdStr(char *SamIdStr);
long SdtSamGetIdStr(char *SamIdStr); GA467协议
功能描述 获取公安部SAM安全模块编号字符串。内部将编号转换为字符串
参数说明 序号 参数 输入/输出 类型 含义
1 SamIdStr OUT 字符串 SAM模块编号字符串
返回值 0表示成功非0表示失败。