SURE系列全功能智能卡读写机 用户手册
写成0xffh。对于ATMEL加密卡在卡被熔丝前, 对卡的擦除需用此函数。对于AT88SC101, AT88SC102, AT88SC103熔丝后, 此函数仅能对密码区, 误码计数区, 用户保护区和测试区等进行擦除。对于AT88SC1604熔丝后, 此函数仅在核对应用区的擦除密码(chk_erk)正确后才能进行擦除。
【示 例】i=era_at (1, 0, 32) && 未熔丝前, 擦除应用区一从0开始的32个字节 (AT88SC102)
第四部分 SIEMENS卡专用接口函数
1. int cpwr_asc(int APZ, int ADDRESS, int LENGTH, unsigned char *BUFF) (LIB) int cpwr_str(int APZ, int ADDRESS, int LENGTH, unsigned char *BUFF) int cpwr_str(int APZ, int ADDRESS, int LENGTH, LPSTR BUFF) (DLL) int cpwr_asc(int APZ, int ADDRESS, int LENGTH, LPSTR BUFF)
【功 能】用一个HEX码或ASCII字符串校验SLE4418/4428、SLE4432/4442卡的相应单 元, 若相同则保护位写0(永久保留);
【参 数】APZ为区域代码: 0, 公用区; 1, 应用区; ADDRESS为要保护写入的字节的起始地址; LENGTH为要保护写入的字节长度; BUFF为用于存储写入数据的字符型指针;
【返回值】0: 正确;2: 无卡;3:未上电;4:串口错误;9:长度超出错误;16:卡型错误; 【说 明】用此函数写入的数据, 以后不能再变化, 故是用此函数写入永久保留的数据; 【示 例】unsigned char BUFF[]=“112233445566778899AA” int i; i=cpwr_asc(0, 2, 10, BUFF);
2. int rd_pm(int APZ, int ADDRESS, int LENGTH, unsigned char *BUFF) (LIB) int rd_pm(int APZ, int ADDRESS, int LENGTH, LPSTR BUFF) (DLL) 【功 能】读SLE4418/4428、SLE4432/4442卡的保护位; 【参 数】APZ为区域代码: 0, 公用区; 1, 应用区; ADDRESS为要读字节的起始地址; LENGTH为要读的字节长度; BUFF为用于存储数据的字符型指针;
【返回值】0:正确, 2: 无卡;3:未上电;4:串口错误;9:长度超出错误;16:卡型错
误;正确则返回读出的HEX码保护位, 每保护位对应一个字符;
【说 明】无
【示 例】unsigned char BUFF[4] int i; i=rd_pm(0, 0, 10, BUFF) &&读公用区从0字节开始的10个字节的保护位
第五部分 SIE4428卡专用接口函数
36
SURE系列全功能智能卡读写机 用户手册 1. int pwr_asc(int APZ, int ADDRESS, int LENGTH, unsigned char *BUFF) (LIB) int pwr_str(int APZ, int ADDRESS, int LENGTH, unsigned char *BUFF) int prd_asc(int APZ, int ADDRESS, int LENGTH, LPSTR BUFF) (DLL) int prd_str(int APZ, int ADDRESS, int LENGTH, LPSTR BUFF)
【功 能】把BUFF中的数据写入SLE4418/SLE4428卡中, 并将相应的保护位写0(永 久保留);
【参 数】APZ为区域代码: 0, 公用区; 1, 应用区; ADDRESS为要写入的字节的起始地址; LENGTH为要写入的字节长度; BUFF为用于存储写入ASCII码字符型指针;
【返回值】0: 正确;2: 无卡;3:未上电;4:串口错误;9:长度超出错误;16:卡型错误; 【说 明】此函数仅对SLE4418, SLE4428有效, 用此函数写入的数据, 以后不能再变化, 故是用此函数写入永久保留的数据;
【示 例】unsigned char BUFF[]=“GUANGKANGLIN12345678” int i; i=pwr_str(1, 2, 10, BUFF);
第六部分 SIE4442卡专用接口函数
1. int rd_sm(unsigned char *BUFF) (LIB) int rd_sm(LPSTR BUFF) (DLL) 【功 能】读SLE4442卡的密码区;
【参 数】BUFF为用于存储数据的字符型指针;
【返回值】0:正确, 2: 无卡;3:未上电;4:串口错误;16:卡型错误; 正确则返回读出的一个字节错码计数和三字节密码; 【说 明】SLE4442密码无法用函数RD_ASC()读取; 【示 例】unsigned char BUFF[4] int i; i=RD_SM(BUFF) && 返回\表示误码计数器为3、密码为\2. int wr_sc(unsigned char *BUFF) (LIB) int wr_sc(LPSTR BUFF) (DLL) 【功 能】改写SLE4442卡的密码; 【参 数】expC为三字节密码;
【返回值】0:正确;2: 无卡;3:未上电;4:串口错误;9:长度超出错误;16:卡型错误; 【说 明】SLE4442密码无法用函数WR_ASC()改写; 【示 例】unsigned char BUFF[]=“FFFFFF” int i; i=WR_SC(BUFF) && 密码改写为\三、FOXPRO语言接口(FOXPRO 2.X for DOS/Window)
37
SURE系列全功能智能卡读写机 用户手册
SURE_FOX.PLB与SURE_FOX.FLL是本公司提供的在DOS环境和WINDOWS环境下对智能卡进行各种操作的FOXPRO语言接口函数库, 用户应用程序中需包含下述命令: SET LIBRARY TO SURE_FOX.PLB && DOS应用程序 SET LIBRARY TO SURE_FOX.FLL && WINDOWS应用程序
第一部分:通用接口函数
1. FINIT_COM(
【功 能】串口选择函数, 选择读写机相连的串口;通讯波特率为9600bps; 【参 数】expN=0, 选择串口一;expN =1, 选择串口二; 【返回值】0:正确; 4:串口错误;
【说 明】 对卡进行操作前, 需用此函数进行串口选择;错误信息的划分如表4.1.1。 【示 例】FINIT_COM(0) &&选择串口一 2. FCLOSE_COM()
【功 能】关闭与读写机相连的串口, 并释放占用的内存; 【参 数】无;
【返回值】0:正确; 4:串口错误;
【说 明】不对卡进行操作时, 需用此函数 3. FSELE_CARD(
【功 能】选择要进行操作的卡型。 【参 数】expN为卡型代码, 【返回值】0:正确。
【说 明】 对卡操作前必须用此函数选择要操作的卡型, 卡型的划分如表4.1.2。 【示 例】FSELE_CARD(11) &&选择AT88SC102卡。 4. FPOWER_ON()
【功 能】给卡上电。 【参 数】无
【返回值】0: 正确;2: 无卡;4:串口错误;
【说 明】本读写机在卡未插入时自动下电, 确保卡插入时不带电, 对卡操作前必须用此函
数给卡上电。
【示 例】FPOWER_ON() 5. FPOWER_OFF()
【功 能】卡下电, 对于自弹式读写机同时退卡。 【参 数】无
38
SURE系列全功能智能卡读写机 用户手册 【返回值】0: 正确;2: 无卡;4:串口错误; 【说 明】根据用户需要可用此函数给卡下电。 【示 例】FPOWER_OFF()
6. FINQUIRE()
【功 能】取读写机对卡操作的历史状态; 【参 数】无;
【返回值】若有错误则返回整型数, 4:串口错误; 正确则返回读写机状态(7字节); 【说 明】第一字节为密码核对正确否标志, “00” 正确、“FF” 不正确; 第二字节为卡毁坏否标志, “00” 正常、“FF” 毁坏; 第三字节为应用区2毁坏否标志, “00” 正常、“FF” 毁坏; 第四字节为应用区2擦除密码核对正确否标志, “00” 正确、“FF” 不正确; 第五字节为应用区1擦除密码核对正确否标志, “00” 正确、“FF” 不正确; 第六字节为卡上电否标志, “00” 上电、“FF” 下电; 第七字节为卡插入否标志, “00” 插入、“FF” 未插入。 【示 例】I=inquire ( )
7. FRD_ASC(
【参 数】expN1为区域代码: 0, 公用区; 1, 应用区一; 2, 应用区二; 3, 应用区三;4,
应用区四;
expN2为要读字节的起始地址; expN3为要读的字节长度;
【返回值】若有错误则返回整型数, 3: 无卡;4: 串口错误;9:长度超出错误; 正确则返回读出的HEX码或ASCII码字符串; 【说 明】无
【示 例】A=FRD_ASC(0, 0, 10) &&读公用区从0字节开始的10个字节
8. FWR_ASC(
【功 能】把一个HEX码或ASCII码形式的字符串直接写入加密卡;
【参 数】expN1为区域代码: 0,公用区; 1,应用区一; 2, 应用区二; 3, 应用区三; 4, 应用区四; expN2为要写字节的起始地址; expC为要写入的HEX码或ASCII码字符串(HEX码长度必须为偶数); 【返回值】0: 正确;2: 无卡;3:未上电;4:串口错误;9:长度超出错误; 【说 明】此函数把一个HEX码或ASCII码形式的字符串直接写入卡中;
39
SURE系列全功能智能卡读写机 用户手册 【示 例】I=FWR_ASC(1, 2, ”11223344AABB”) &&把”11223344AABB”写入应用区 &&一字节2开始的6个字节 9. FDES_STR(〈expC1>,
【功 能】用DES算法加密8字节ASC码或16字节HEX码字符串;
【参 数】expC1为待加密的8字节ASC码或16字节HEX码字符串;expC2为ASC码8 字节或16字节HEX码密钥字符串;
【返回值】若有错误则返回空字符串;正确则返回8字节ASC码或16字节HEX码密文字 符串
【说 明】DES密钥、要加密的数据字符串长度必须为8(ASCII码)或16(HEX码)。 【示 例】参见FUNDES_STR()、FUNDES_ASC()举例。
10. FUNDES_STR(〈expC1>,
【功 能】将用DES算法加密的8字节ASC码或16字节HEX码密文字符串转换为8字节 ASC码或16字节HEX码明文字符串;
【参 数】expC1为8字节ASC码或16字节HEX码密文字符串;expC2为8字节ASC码或16 字节HEX码密钥字符串;
【返回值】若有错误则返回空字符串; 正确则返回8字节明文字符串 【说 明】DES密钥、要密文字符串长度必须为8或16。
【示 例】A=FDES_STR(“DFKDKLJF”, ”ADJFKJSK”) &&密文存储于A中 B=FUNDES_STR(A, ”ADJFKJSK”) &&明文存储于B中
C=FDES_ASC(“1234567890123456”,1234567890ABCDEF”) &&密文存储于C中 D=FUNDES_ASC(C, ”1234567890ABCDEF”) &&明文存储于D中
第二部分:加密卡专用接口函数
1. FCHK_SC(
【功 能】核对加密卡主密码或区域密码;
【参 数】expN为区域代码:0, 公用区;1, 应用区一;2, 应用区二;3, 应用区三;4, 应
用区四;
expC为HEX码字符串密码;
【返回值】0: 正确;2: 无卡;3:未上电;4:串口错误;9:数据长度错误;11: 密码
错误; 14: 卡已损坏;
【说 明】对加密卡进行读写前须用此函数核对密码后才能进行;
【示 例】CODE=FCHK_SC(0, ”F0F0”) &&”F0F0”为AT88SC102加密卡密码
第三部分:ATMEL加密卡专用接口函数
40