通用序列身份證閱讀器SDK二次開發包免費下載
通用序列身份證閱讀器SDK二次開發包免費下載
提供第二三代居民身份證閱讀器CS客戶端二次開發和BS瀏覽器端二次開發,相關技術支持免費提供。
二代證SDK開發包開發說明,包括C/S端開發和B/S端開發:
居民身份證驗證安全控制模塊接口
API 使用手冊
目錄
1.前言1
2.系統要求1
3.API 列表1
4.API 詳細說明2
4.1端口類 API2
4.1.1SDT_GetCOMBaud2
4.1.2SDT_SetCOMBaud2
4.1.3SDT_OpenPort3
4.1.4SDT_ClosePort3
4.2SAM 類 API4
4.2.1SDT_ResetSAM4
4.2.2SDT_SetMaxRFByte4
4.2.3SDT_GetSAMStatus5
4.2.4SDT_GetSAMID5
4.2.5SDT_GetSAMIDToStr6
4.3身份證卡類 API6
4.3.1SDT_StartFindIDCard6
4.3.2SDT_SelectIDCard7
4.3.3SDT_ReadBaseMsg7
4.3.4SDT_ReadBaseMsgToFile8
4.3.5SDT_ReadBaseFPMsg9
4.3.6SDT_ReadBaseFPMsgToFile10
4.3.7SDT_ReadNewAppMsg11
5.API 調用說明12
5.1調用順序12
5.2C 語言示例程序12
6.函數返回碼表15
1.前言
本手冊是居民身份證驗證安全控制模塊(以下有時以 SAM_A 指代)接口 API 的使用說明,適用于版本號為 2.0.2.0 的 API 動態庫(sdtapi.dll)。
2.系統要求
使用本動態庫的 PC 機,必須滿足下列條件:
?Windows 98,Windows 2000 Pro,Windows 2000 Server,WindowsXP;
?至少一個空閑普通串口或 USB 口。
3.API 列表
API 分為三類,在下表中列出。
序號函數名功能描述調用層
級號
端口類API
1.SDT_GetCOMBaud查看 SAM_A 串口當前波特率1
2.SDT_SetCOMBaud設置業務終端與 SAM_A 串口的波特率1
3.SDT_OpenPort打開串口/USB 口1
4.SDT_ClosePort關閉串口/USB 口2
SAM類API
5.SDT_ResetSAM對 SAM_A 復位1
6.SDT_SetMaxRFByte設置射頻適配器一幀通信數據的最大字
節數1
7.SDT_GetSAMStatus對 SAM_A 進行狀態檢測1
8.SDT_GetSAMID讀取 SAM_A 的編號,輸出為十六進制數
值1
9.SDT_GetSAMIDToStr讀取 SAM_A 的編號,輸出為字符串1
身份證卡類API
10.SDT_StartFindIDCard尋找居民身份證1
11.SDT_SelectIDCard選取居民身份證2
12.SDT_ReadBaseMsg讀取居民身份證機讀文字信息和相片信
息相片3
13.SDT_ReadBaseMsgToFile讀取居民身份證機讀文字信息和相片信
息,并將其存入用戶指定文件3
14.SDT_ReadBaseFPMsg讀取居民身份證機讀文字信息、相片信
息和指紋信息3
15.SDT_ReadBaseFPMsgToFile讀取居民身份證機讀文字信息、相片信
息和指紋信息,并將其存入用戶指定文件3
16.SDT_ReadNewAppMsg讀取追加地址信息3
4.API 詳細說明
4.1端口類 API
4.1.1SDT_GetCOMBaud
查看 SAM_A 串口當前波特率(該函數只用于 SAM_A 采用串口的情形,如果采用 USB 接口則不支持該 API)。
intSDT_GetCOMBaud (
intiPort,
unsigned int *puiBaudRate
);
參數說明:
iPort
[in] 整數,表示端口號。此處端口號必須為 1~16,表示串口。
puiBaudRate
[out] 無符號整數指針,指向普通串口當前波特率, 默認情況下為 115200bps。
返回值:
0x90成功。
0x01端口打開失敗/端口號不合法。
0x05無法獲得該 SAM_A 的波特率,該 SAM_A 串口不可用。
注:[in]表示該參數為輸入參數,[out]表示該參數為輸出參數,下同。
4.1.2SDT_SetCOMBaud
設置業務終端及 SAM_A 的串口的波特率(該函數只用于 SAM_A 采用串口的情形,如果采用 USB 接口則不支持本函數)。
intSDT_SetCOMBaud (
intiPort,
unsigned intuiCurrBaud,
unsigned intuiSetBaud
);
參數說明:
iPort
[in] 整數,表示端口號。此處端口號必須為 1~16,表示串口。
uiCurrBaud
[in] 無符號整數,調用該 API 前已設置的業務終端與 SAM_A 通信的波特率
(SAM_A 出廠時默認值為 115200bps)。業務終端以當前使用的波特率與 SAM_A
C/S客戶端開發:
1. DLL文件夾為編譯之后的SDK開發包、所有的支持庫、說明文檔、Lib文件和.H頭文件
測試程序文件夾下為
2. BCB6文件夾內為C++Builder6的測試源程序
3. C#文件夾內為VS2008-C#的測試源程序
4. Delphi7文件夾為DelPhi7的測試源程序
5. Java測試源程序,JDK1.6,MyEclipse7.0下調試通過(開發者:劉翀)
6. PB9測試源程序
7. VB6文件夾為VB6的測試源程序
8. VC6文件夾為VC++6的測試源程序
以上測試程序開發環境為:
操作系統 Win2003SP2
軟件編譯環境Borland C++Builder6
VS2008
Borland Delphi7
JDK1.6,MyEclipse7.0
PowerBuilder9
VB6
VC++6
B/S瀏覽器端開發:
1.CAB文件夾下為OCX控件cab包,可用于二次開發或發行
2.測試程序文件夾為測試OCX控件的源程序,分別提供BCB6、C#
DelPhi7、Javascript、VB6和VBScricp的測試程序
3.手工安裝OCX的方法,把CAB文件夾中的SynCardOCXCAB解壓到
任意文件夾,比方為C:\CAB,點 【開始】-【運行】,輸入
下列命令運行
regsvr32 C:\Cab\SynCardOcx.ocx
要卸載輸入下列命令運行
regsvr32 -u C:\Cab\SynCardOcx.ocx
一、系統的基本要求
a)Windows 98,Windows 2000 Pro,Windows 2000 Server,WinXP,Windows Vista,Windows7
b)至少32兆內存(32M RAM or Larger)
c)至少10兆空閑硬盤空間(10M Free Hard Disk Space or Larger)
d)至少一個空閑普通串口或USB口(視用戶需求而定)。
二、SDK函數說明
(一)端口類API:
Syn_SetMaxRFByte 設置射頻適配器最大通信字節數
int Syn_SetMaxRFByte (
int iPort,
unsigned charucByte,
int bIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。串口0001至0016,USB1001至1016
ucByte
[in] 無符號字符,24-255,表示射頻適配器最大通信字節數。
iIfOpen
[in] 整數,非0表示在API函數內部包含了打開端口和關閉端口函數,0表示在API函數內部不包含了打開端口和關閉端口函數
返回值:
0成功
其他失敗(具體含義參見返回碼表)
Syn_GetCOMBaud 查看串口當前波特率(該函數只用于SAM采用RS232串口的情形,如果采用USB接口則不支持該API)。
int Syn_GetCOMBaud (
int iPort,
unsigned int * puiBaudRate
);
參數說明:
iPort
[in] 整數,表示端口號。此處端口號必須為1-16,表示串口
puiBaudRate
[out] 無符號整數指針,指向普通串口當前波特率, 默認情況下為115200。
返回值:
0成功
0X01端口打開失敗/端口號不合法
0X05無法獲得該SAM的波特率,該SAM串口不可用。
Syn_GetCOMBaudEx 查看串口當前波特率(該函數只用于SAM采用RS232串口的情形,如果采用USB接口則不支持該API)。
int Syn_GetCOMBaudEx (
int iPort,
);
參數說明:
iPort
[in] 整數,表示端口號。此處端口號必須為1-16,表示串口
返回值:
0失敗 其他為讀卡器當前波特率
Syn_SetCOMBaud 設置SAM的串口的波特率(該函數只用于SAM采用RS232串口的情形,如果采用USB接口則不支持該API),設置成功后,在該SAM和主機注冊表中都記錄設置后的波特率,保證在SAM重新啟動和該套API被重新調用時采用設置后的波特率。該函數調用成功后,需要延時5毫秒,然后才能繼續與SAM通信。
int Syn_SetCOMBaud (
int iPort,
unsigned intuiCurrBaud,
unsigned int uiSetBaud
);
參數說明:
iPort
[in] 整數,表示端口號。此處端口號必須為1-16,表示串口。
uiCurrBaud
[in] 無符號整數,調用該API前已設置的業務終端與SAM通信的波特率(SAM出廠時默認,業務終端與SAM通信的波特率為115200).業務終端以該波特率與SAM通信,發出設置SAM新波特率的命令.。uiCurrBaud只能為下列數值之一:115200,57600,38400,19200,9600.如果uiCurrBaud數值不是這些值之一,函數返回0X21;如果已設置的波特率與uiCurrBaud不一致, 則函數返回0X02,表示不能設置,調用API不成功。
uiSetBaud
[in] 無符號整數,將要設置的SAM與業務終端通信波特率。uiSetBaud只能取下列值之一::115200,57600,38400,19200,9600,如果輸入uiSetBaud參數不是這些數值之一,,函數返回0X21,設置不成功,保持原來的波特率不變。
返回值:
0成功
0X01端口打開失敗/端口號不合法。
0X02超時,設置不成功。
0X21uiCurrBaud 、uiSetBaud輸入參數數值錯誤。
Syn_OpenPort 打開端口
int Syn_OpenPort(
int iPort
);
參數說明:
iPort
[in] 整數,表示端口號。1-16(十進制)為串口,1001-1016(十進制)為USB口,USB的端口設置參看“USB設備配置使用手冊”。
返回值:
0打開端口成功
0X01打開端口失敗/端口號不合法
Syn_ClosePort 關閉端口
int Syn_ClosePort (
int iPort
);
參數說明:
iPort
[in] 整數,表示端口號。
返回值:
0關閉端口成功。
0x01端口號不合法
(二)SAM類API:
Syn_ResetSAM對SAM復位
int Syn_ResetSAM (
int iPort,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。根據SAM使用的接口不同(分為普通串口SAM和USB口SAM),分別使用不同的端口號(目前串口和USB都只支持16個,即串口0001-0016和USB1001-1016):
普通串口SAM0001 – 0016(十進制)例如:
0001:串口1(COM1)
0002:串口2(COM2)
USB口SAM1001 – 1016(十進制)例如:
1001:USB1
1002:USB2
iIfOpen
[in] 整數,0表示不在該函數內部打開和關閉串口,此時確保之前調用了Syn_OpenPort來打開端口,并且在不需要與端口通信時,調用Syn_ClosePort關閉端口;非0表示在API函數內部包含了打開端口和關閉端口函數,之前不需要調用Syn_OpenPort,也不用再調用Syn_ClosePort。
返回值:
0成功
其他失敗(具體含義參見返回碼表)
Syn_GetSAMStatus 對SAM進行狀態檢測。
int Syn_GetSAMStatus (
int iPort,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0SAM正常
0x60自檢失敗,不能接收命令
其他命令失敗(具體含義參見返回碼表)
Syn_GetSAMID 讀取SAM的編號。
int Syn_GetSAMID (
int iPort,
unsigned char *pucSAMID,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucSAMID
[out] 無符號字符串指針,指向讀到的SAM編號, 16字節。
返回值:
0成功
其他失敗(具體含義參見返回碼表)
Syn_GetSAMIDToStr 讀取SAM的編號。
int Syn_GetSAMIDToStr (
int iPort,
char *pcSAMID,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pcSAMID
[out] 字符串指針,指向讀到的SAM編號。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0成功
其他失敗(具體含義參見返回碼表)
Syn_FindReader 自動尋找讀卡器。
int Syn_FindReader ();
返回值:
0未找到
其他1~16串口1001~1016USB
(三)身份證卡類API:
Syn_StartFindIDCard 開始找卡。
int Syn_StartFindIDCard (
int iPort ,
unsigned char *pucIIN,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucIIN
[out] 無符號字符指針,指向讀到的IIN。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0找卡成功
0x80找卡失敗
Syn_SelectIDCard 選卡。
int Syn_ SelectIDCard (
int iPort ,
unsigned char *pucSN,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucSN
[out] 無符號字符指針,指向讀到的SN。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0選卡成功
0x81選卡失敗
Syn_ReadBaseMsg 讀取ID卡內基本信息區域信息。
int Syn_ReadBaseMsg (
int iPort,
unsigned char * pucCHMsg,
unsigned int *puiCHMsgLen,
unsigned char * pucPHMsg,
unsigned int *puiPHMsgLen,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucCHMsg
[out] 無符號字符指針,指向讀到的文字信息。
puiCHMsgLen
[out] 無符號整型數指針,指向讀到的文字信息長度。
pucPHMsg
[out] 無符號字符指針,指向讀到的照片信息。
puiPHMsgLen
[out] 無符號整型數指針,指向讀到的照片信息長度。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0讀基本信息成功
其他讀基本信息失敗(具體含義參見返回碼表)
Syn_ReadIINSNDN 讀取ID卡內IIN,SN和DN。
int Syn_ReadIINSNDN (
int iPort,
unsigned char * pucIINSNDN,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucIINSNDN
[out] 無符號字符指針,指向讀到的IIN,SN和DN,長度為固定28字節。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0讀IIN,SN和DN成功
其他讀IIN,SN和DN失敗(具體含義參見返回碼表)
Syn_ReadBaseMsgToFile 與Syn_ ReadBaseMsg函數類似,讀取ID卡內基本信息區域信息,并將讀到的基本信息寫進輸入參數所指定的文件中。
int Syn_ ReadBaseMsgToFile (
int iPortID,
char * pcCHMsgFileName,
unsigned int *puiCHMsgFileLen,
char * pcPHMsgFileName,
unsigned int *puiPHMsgFileLen,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pcCHMsgFileName
[in] 讀取到的ID卡內文字信息,需要寫入文件,此為由用戶指定的文件名。
puiCHMsgFileLen
[out] 存儲文字信息的文件的長度。
pcCHMsgFileName
[in] 讀取到的ID卡內照片信息,需要寫入文件,此為由用戶指定的文件名。
puiCHMsgFileLen
[out] 存儲照片信息的文件的長度。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0讀基本信息成功
其他讀基本信息失敗(具體含義參見返回碼表)
Syn_ReadIINSNDNToASCII 讀取ID卡內IIN,SN和DN,并把16進制轉化成ASCII形式。
int Syn_ReadIINSNDNToASCII (
int iPort,
unsigned char * pucIINSNDN,
intiIfOpen
);
參數說明:
iPort
[in] 整數,表示端口號。參見Syn_ResetSAM。
pucIINSNDN
[out] 無符號字符指針,指向讀到的IIN,SN和DN,長度為固定56字節。
iIfOpen
[in] 整數,參見Syn_ResetSAM。
返回值:
0讀SN和DN成功
其他讀SN和DN失敗(具體含義參見返回碼表)
舉例說明:
如讀取到的IIN,SN和DN十六進制是{0x12, 0x9a…},把每個字節拆分成兩個ASCII形式的數,轉化成后則為{0x31,0x32,0x39,0x61…}。
Syn_GetBmp本函數用于將wlt文件解碼成bmp文件。
int Syn_GetBmp(
char * Wlt_File,
int intf
);
參數說明:
Wlt_File
[in] 字符指針。wlt文件名
intf
[in]閱讀設備通訊接口類型(1—RS-232C,2—USB)
返回值:
值意義
1相片解碼解碼正確
0調用sdtapi.dll錯誤
-1相片解碼錯誤
-2wlt文件后綴錯誤
-3wlt文件打開錯誤
-4wlt文件格式錯誤
-5軟件未授權
-6設備連接錯誤
(四)其他設置類API
Syn_SetPhotoPath 本函數用于設置照片文件存儲的路徑
int Syn_SetPhotoPath(
int iOption
char * cPhotopath
);
參數說明:
iOption
[in] 整形,0=C:根目錄,1=當前路徑,2=指定路徑
cPhotoPath
[in] 字符指針。路徑名
返回值:
0 成功
-1不成功
Syn_SetPhotoType 本函數用于設置照片文件存儲的格式
int Syn_SetPhotoType(
int iType
);
參數說明:
iType
[in] 整形。1=bmp , 2=jpeg,3=base64
返回值:
0 成功
-1不成功
Syn_SetPhotoName 本函數用于設置照片文件的文件名
int Syn_SetPhotoName(
int iType
);
參數說明:
iType
[in] 整形。0=tmp , 1=姓名,2=身份證號,3=姓名_身份證號
返回值:
0 成功
-1不成功
Syn_SetSexType 本函數用于設置返回性別的格式
int Syn_SetSexType(
int iType
);
參數說明:
iType
[in] 整形。0=卡內存儲的數據, 1=解釋之后的數據
返回值:
0 成功
-1不成功
Syn_SetNationType 本函數用于設置返回民族的格式
int Syn_SetNationType(
int iType
);
參數說明:
iType
[in] 整形。0=卡內存儲的數據 , 1=解釋之后的數據,2=解釋之后+“族”
返回值:
0 成功
-1不成功
Syn_SetBornType 本函數用于設置返回出生日期的格式
int Syn_SetBornType(
int iType
);
參數說明:
iType
[in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,
3=YYYY-MM-DD,4=YYYY/MM/DD
返回值:
0 成功
-1不成功
Syn_SetUserLifeBType 本函數用于設置返回有效期開始日期的格式
int Syn_SetUserLifeBType(
int iType
);
參數說明:
iType
[in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,
3=YYYY-MM-DD,4=YYYY/MM/DD
返回值:
0 成功
-1不成功
Syn_SetUserLifeEType 本函數用于設置返回有效期結束日期的格式
int Syn_SetUserLifeEType(
int iType;int iOption
);
參數說明:
iType
[in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,
3=YYYY-MM-DD,4=YYYY/MM/DD
iOption
[in] 整形。0=長期不轉換 1=長期轉換為 有效期開始加50年
返回值:
0 成功
-1不成功
三、OCX接口說明
屬性
NameA 該屬性返回讀取信息的姓名,返回數據類型為BSTR
Sex該屬性返回讀取信息的性別,返回數據類型為BSTR
Nation該屬性返回讀取信息的民族,返回數據類型為BSTR
Born該屬性返回讀取信息的出生日期,返回數據類型為BSTR
Address該屬性返回讀取信息的地址,返回數據類型為BSTR
CardNo該屬性返回讀取信息的身份證號,返回數據類型為BSTR
Police該屬性返回讀取信息的發證機關,返回數據類型為BSTR
UserLifeB該屬性返回讀取信息的有效期開始,返回數據類型為BSTR
UserLifeE該屬性返回讀取信息的有效期結束,返回數據類型為BSTR
PhotoName;該屬性返回讀取信息的照片文件名,返回數據類型為BSTR
Base64Photo該屬性返回讀取信息的Base64照片編碼,僅在用SetPhotoType方法設置存儲文件為Base64格式之后有效返回數據類型為BSTR
方法
SetPhotoPath本方法用于設置存儲照片的路徑,參見Syn_SetPhotoPath。
參數說明:
[in]iType整形
cPath字符串,BSTR
SetPhotoType本方法用于設置存儲照片的格式,參見Syn_SetPhotoType
SetPhotoName本方法用于設置存儲照片的文件名,參見Syn_SetPhotoName
SetSexType 本方法用于設置返回性別的格式,參見Syn_SetSexType
SetNationType本方法用于設置返回民族的格式,參見Syn_SetNationType
SetBornType本方法用于設置返回出生日期的格式,參見Syn_SetBornType
SetUserLifeBType本方法用于設置返回有效期開始的格式,參見Syn_SetUserLifeBType
SetUserLifeEType本方法用于設置返回有效期結束的格式,參見Syn_SetUserLifeEType
FindReader本方法可以自動尋找計算機連接的讀卡器,參見Syn_FindReader
GetSAMID本方法返回讀卡器的ID號,返回類型為BSTR,僅在FinderReader返回值大于0才有效
SetReadType設置讀卡的方式,0為手動 1為自動
ReadCardMsg手動讀卡函數,返回0為成功,成功后通過屬性得到信息
SetLoopTime自動讀卡方式下循環讀卡間隔,至少要大于1000毫秒
參數說明:
[in]iLoopTime 整形
事件
CardIn該事件在自動讀卡方式下讀卡成功時出發,State=1有效
參數說明:
[in]State整形
控件的使用方法:
1)設置參數的方法可以隨時調用,調用一次即有效。
2)首先要調用FindReader方法,返回值大于0才能進行GetSAMID、SetReadType、ReadCardMsg、SetLoopTime的操作
四、返回值列表
類 別返回值
(16進制)意 義
成功信息 90操作成功
91沒有該項內容
9F返回找卡成功信息
SAM通信 01端口打開失敗/端口尚未打開/端口號不合法
02PC接收超時,在規定的時間內未接收到規定長度的數據。
03PC判斷校驗和錯
04USB設備未配置
05該SAM串口不可用,只在Syn_GetCOMBaud時才有可能返回
06USB設備被禁用
10SAM判斷校驗和錯
11SAM接收超時,在規定的時間內未接收到規定長度的數據。
SAM命令錯 21接收業務終端的命令錯誤,包括命令中的各種數值或邏輯搭配錯誤
23越權的操作申請
與ID卡相關 80找卡不成功
81選卡不成功
31卡認證機具失敗
32機具認證卡失敗
33信息驗證錯誤
34尚未找卡,不能進行對卡的操作
40無法識別的卡類型
41讀卡操作失敗
50寫卡操作失敗
61用戶登錄失敗
SAM狀態 60自檢失敗,不能接收命令
66KDC沒有下載正式密鑰