谁有IC卡的开发经验,交流交流阿! (50分)

  • 主题发起人 主题发起人 小虫~
  • 开始时间 开始时间
你讲的可能是非接触性的,我们采用4428,8k(1千张以上)7元。
4428做照片卡,你选用什么打印机?交流一下?
 
明华的RD读写器做的一点也不精致

不过我们用的电话ic卡它可支持啊,是SLE4406
经过个人化操作后,只可以递减,不可以递增
这种限制是否只是在dll中而不是在读写器上?
这个是否有利用价值?
 
关注此题
 
各路高手
我用的SLE4442卡
要读写IC卡数据
如果有相关开发资料和开发事例烦请Copy发给我一份 感激不尽!!
lgq4@0451.com
 
多人接受答案了。
 
LKIC32.DLL提供的函数

<一>、函数目录

一、 基本通用函数
1.IC_InitComm 打开串口
2.IC_ExitComm 关闭串口
3.IC_Status 返回读写器状态
4.IC_Down 对卡下电(用于2.0以后版本)
5.IC_InitType 设置要读卡的类型
6.IC_WhatIsType 返回IC卡的卡型
7.IC_WhatVer 返回读卡器的版本号
8.IC_Read 通用读出函数(除45DB041)
9.IC_Write 通用写入函数(除45DB041,不建议用于ATMEL 102)
10.IC_Read_Hex 通用读出函数,按16进制数模式(除45DB041)
11.IC_Write_Hex 通用写入函数,按16进制数模式(除45DB041,不建议用于ATMEL 102)

二、AT24C系列卡函数:
无特殊函数。

三、西门子4432/4442卡函数:
1.IC_WriteProtection 写S4432/S4442卡的保护位
2.IC_ReadProtection 读S4432/S4442卡的保护位
3.IC_ReadCount_SLE4442 读4442卡错误计数器
4.IC_CheckPass_SLE4442 4442卡校验密码
5.IC_ChangePass_SLE4442 4442卡变更密码
6.IC_CheckPass_SLE4442hex 4442卡校验密码,按16进制数模式
7.IC_ChangePass_SLE4442hex 4442卡变更密码,按16进制数模式

四、西门子4418/4428卡函数:
1.IC_WriteWithProtection 写S4418/S4428卡的保护位
2.IC_ReadWithProtection 读S4418/S4428卡的保护位
3.IC_ReadCount_SLE4428 读4428卡错误计数器
4.IC_CheckPass_SLE4428 4428卡校验密码
5.IC_ChangePass_SLE4428 4428卡变更密码
6.IC_CheckPass_SLE4428hex 4428卡校验密码,按16进制数模式
7.IC_ChangePass_SLE4428hex 4428卡变更密码,按16进制数模式


五、AT88SC101/102/103卡专用函数:
1.IC_Write_102 写内容到102卡(不带擦除)
2.IC_Read_102 读102卡的内容
3.IC_ReadCount_102 读102卡错误计数器
4.IC_CheckPass_102 102卡校验密码
5.IC_ChangePass_102 102卡变更密码
6.IC_CheckAPass_102 102卡校验用户区擦除密码
7.IC_ChangeAPass_102 102卡变更用户区擦除密码
8.IC_CheckPass_102hex 102卡校验密码,按16进制数模式
9.IC_ChangePass_102hex 102卡变更密码,按16进制数模式
10.IC_CheckAPass_102hex 102卡校验用户区擦除密码,按16进制数模式
11.IC_ChangeAPass_102hex 102卡变更用户区擦除密码,按16进制数模式
12.IC_Fuse_102 熔丝
13.IC_Erase_102 102卡擦除指令
14.IC_EWrite_102 写内容到102卡(带擦除)
15.IC_EWrite_102Hex 写内容到102卡,按16进制数(带擦除)


六、AT88SC1604卡函数:
1.IC_Fuse_1604 熔丝
2.IC_ReadCount_1604 读1604卡错误计数器
3.IC_CheckPass_1604 1604卡校验密码(包括用户区密码)
4.IC_ChangePass_1604 1604卡变更密码(包括用户区密码)
5.IC_CheckPass_1604hex 1604卡校验密码,按16进制数模式(包括用户区密码)
6.IC_ChangePass_1604hex 1604卡变更密码,按16进制数模式(包括用户区密码)


七、AT88SC1608卡函数(用于2.0以后版本)
1.IC_CheckAZPass_1608 1608卡校验密码(十六个)
2.IC_CheckAZPass_1608hex 1608卡校验密码,按16进制数模式(十六个)
3.IC_ChangeAZPass_1608 1608卡变更密码(十六个)
4.IC_ChangeAZPass_1608hex 1608卡变更密码,按16进制数模式(十六个)
5.IC_ReadCount_1608 读1608卡错误计数器(十七个)
6.IC_Fuse_1608 熔丝
7.IC_ChangeZone_1608 变更1608卡用户区标志寄存器(八个)

八、AT45DB041卡函数:
1.IC_DirectRead 读45D041卡的内容
2.IC_DirectWrite 写内容到45D041卡
3.IC_WriteByBuffer 写内容到45D041卡(通过BUFFER)
4.IC_DirectRead_Hex 读45D041卡的内容,按16进制数
5.IC_DirectWrite_Hex 写内容到45D041卡,按16进制数
6.IC_WriteByBuffer_Hex 写内容到45D041卡,按16进制数(通过BUFFER)

<二>、函数说明

一、 通用函数:
1. HANDLE IC_InitComm (__int16 port)
说明:打开串口通讯设备
调用:__int16 port ---- 通讯口号,整数0,1,2,3
返回:<0 错误,见错误码
>=0 通讯设备标识符
举例:ICDev= IC_InitComm (0)
打开串口一。

2. __int16 IC_ExitComm(HANDLE idComDev)
说明:关闭串口通讯设备
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误,见错误码
>=0 通讯设备正常关闭
举例:IC_ExitComm(idComDev)
关闭idComDev指定的串口。

3. __int16 IC_Status(HANDLE idComDev)
说明:返回当前状态*
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误,见错误码
=0 正确*
举例:IC_Status(idComDev)

4. __int16 IC_Down(HANDLE idComDev)
说明:对卡下电,下电后必须再效验密码才能写(用于2.0以后版本)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码,-1为版本不对
=0 正确.
举例:IC_Down(idComDev)

5.__int16 IC_InitType (HANDLE idComDev,__int16 type)
说明:设置卡类型
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 type ---- 卡类型号
返回:<0 错误。见错误码
>=0 操作正确
举例:IC_InitType(HANDLE idComDev,0x20)
设置卡类型为ATMEL102型

6.__int16 IC_WhatIsType (HANDLE idComDev)
说明:自动测试卡类型
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码,-1为无法识别的卡型。
>=0 操作正确,返回数值的低八位是卡的类型代号,高八位是同一种卡类型中不同卡的子
代码。
举例: IC_WhatIsType (HANDLE idComDev)
返回:0x20,表示当前为AT88SC102卡。

7.__int16 IC_WhatVer(HANDLE idComDev)
说明:读取读卡器版本号
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
>=0 操作正确,返回读卡器版本号,0x10为1.0版,0x20为2.0版
举例:IC_WhatVer (HANDLE idComDev)
返回:0x20,表示当前读卡器版本为2.0。

8.__int16 IC_Read(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:读取IC卡数据
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 读数据IC卡起始地址
__int16 len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
返回:<0 错误。见错误码
=0 正确。
举例:IC_Read (idComDev,16,64, databuffer)
读取16至79的数据到databuffer,正确返回0。

9.__int16 IC_Write(HANDLE idComDev, __int16 offset,__int16 len, unsigned char * databuffer)
说明:写数据到IC卡
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡起始地址
__int16 len ---- 数据的长度
unsigned char * databuffer ---- 即将写入IC卡的数据
并存放返回数据
返回:<0 错误。见错误码
=0 正确。
举例:IC_Write (idComDev,32,14,"IcCard Message")
将IcCard Message写入从32地址开始的数据区。

10.__int16 IC_Read_Hex(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:读取IC卡数据,按16进制数
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 读数据IC卡起始地址
__int16 len ---- 数据长度(注意是字节数,不是整数位数)
unsigned char * databuffer ---- 存放数据的缓冲区(注意缓冲区大小为len的2倍)
返回:<0 错误。见错误码
=0 正确。
举例:如IC卡0~3字节存储12h,34h,56h,abh
IC_Read_Hex (idComDev,0,4, databuffer)
读取0至3的数据到databuffer,正确返回0,databuffer储存“123456ab”。


11.__int16 IC_Write_Hex (HANDLE idComDev, __int16 offset,__int16 len, unsigned char * databuffer)
说明:写数据到IC卡,按16进制数
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡起始地址
__int16 len ---- 数据的长度(注意是字节数,不是整数位数)
unsigned char * databuffer ---- 即将写入IC卡的数据(注意缓冲区大小为len的2倍)
返回:<0 错误。见错误码,-1为非整数字符,如“t”,“M”等。
=0 正确。
举例:IC_Write_Hex (idComDev,32,4,"1543a5c9")
将1543a5c9写入从32地址开始的数据区。
IC卡存储4个字节为15H,43H,A5H,C9H。


二、AT24C系列卡函数:
无特殊函数。


三、西门子4432/4442卡函数:
1.__int16 IC_WriteProtection (HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:写IC卡保护位
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡保护位起始地址
__int16 len ---- 保护位数
unsigned char * databuffer ---- 要置保护位的数据内容,其内容必须与卡中现存的内容相
同,否则不能置写保护。.
返回:<0 错误。见错误码
=0 正确。
举例: ProtBuffer="LKIC"
IC_WriteProtection (idComDev,16,4,ProtBuffer)
将16,17,18,19位置保护

2.__int16 IC_ReadProtection (HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:读取IC卡保护位
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 读保护位IC卡起始地址
__int16 len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
数据值为0表示保护位已置
1表示未置保护
0xFF表示非保护位
返回:<0 错误。见错误码
=0 正确。
举例:IC_ReadProtection (idComDev,0,32,ProtBuffer)
读取地址0~31的保护位数据,
ProtBuffer每一字节为0表示对应的保护位已置。

3.__int16 IC_ReadCount_SLE4442(HANDLE idComDev)
说明:读取西门子4442卡密码计数器值
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
>=0 密码计数器计数值。此值表示试密码的机会。最大值为3,表示还有3次机会,最小
值为0,表示已经无法再校验密码。
举例:IC_ReadCount_SLE4442 (idComDev)

4.__int16 IC_CheckPass_SLE4442(HANDLE idComDev, unsigned char* Password)
说明:校验密码(用于SLE4442型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 3字节
返回:<0 错误。见错误码
=0 校验密码正确。
举例:IC_CheckPass_SLE4442 (idComDev,"111")
校验卡密码为111。

5.__int16 IC_ChangePass_SLE4442(HANDLE idComDev, unsigned char* Password)
说明:更改密码(用于SLE4442型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 3字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_SLE4442 (idComDev,"222")
将密码改为222。

6.__int16 IC_CheckPass_SLE4442hex(HANDLE idComDev, unsigned char* Password)
说明:按十六进制方式校验密码(用于SLE4442型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 6字节
返回:<0 错误。见错误码
=0 校验密码正确。
举例:IC_CheckPass_SLE4442hex (idComDev,"313233")
校验卡密码为123。(即31H、31H、31H)

7.__int16 IC_ChangePass_SLE4442hex(HANDLE idComDev, unsigned char* Password)
说明:更改密码(用于SLE4442型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 6字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_SLE4442hex (idComDev,"323232")
将密码改为222。


四、西门子4418/4428卡函数:
1.__int16 IC_WriteWithProtection (HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:写IC卡的同时置保护位
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 Offset ---- 写IC卡保护位起始地址
__int16 len ---- 保护位数
unsigned char * databuffer ---- 要置保护位的数据内容
返回:<0 错误。见错误码
=0 正确。
举例: databuffer ="LKIC"
IC_WriteWithProtection (idComDev,16,4, databuffer)
对16,17,18,19位写入"LKIC"并置写保护

2.__int16 IC_ReadWithProtection (HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:带保护位读IC卡。
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 读保护位IC卡起始地址
__int16 len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
此缓冲区包括两部分内容:
第一部分为卡中的数据,长度为len所表示的长度;第二部分为相应的保护
位内容,"0"表示保护位已置,"1"表示未置保护,第二部分从偏移址len开
始,也是len个字节。
返回:<0 错误。见错误码
=0 正确。
举例:IC_ReadWithProtection (idComDev,0,32, databuffer)
读取地址0~31的数据和其相应的保护位,databuffer的0-31个字节为卡中数
据.从第32位开始databuffer每一字节为"0"表示对应的保护位已置。
注意:databuffer所指缓冲区的长度必须为2*Len,否则将导致不可预料的错误。

3.__int16 IC_ReadCount_SLE4428(HANDLE idComDev)
说明:读取西门子4428卡密码计数器值
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
>=0 密码计数器计数值。此值表示试密码的机会。最大值为8,表示还有8次机会,最小
值为0,表示已经无法再校验密码。
举例:IC_ReadCount_SLE4428 (idComDev)

4.__int16 IC_CheckPass_SLE4428(HANDLE idComDev, unsigned char* Password)
说明:校验密码(用于SLE4428型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 2字节
返回:<0 错误。见错误码
=0 校验密码正确
举例:IC_CheckPass_SLE4428 (idComDev,"11")
校验卡密码为11。

5.__int16 IC_ChangePass_SLE4428(HANDLE idComDev, unsigned char* Password)
说明:更改密码(用于SLE4428型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 2字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_SLE4428 (idComDev,"22")
将密码改为22。

6.__int16 IC_CheckPass_SLE4428hex(HANDLE idComDev, unsigned char* Password)
说明:以十六进制模式校验密码(用于SLE4428型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 4字节
返回:<0 错误。见错误码
=0 校验密码正确
举例:IC_CheckPass_SLE4428hex (idComDev,"3131")
校验卡密码为31h、31h。

7.__int16 IC_ChangePass_SLE4428hex(HANDLE idComDev, unsigned char* Password)
说明:以十六进制模式更改密码(用于SLE4428型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 4字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_SLE4428hex (idComDev,"3232")
将密码改为32H、32H。


五、AT88SC101/102/103卡专用函数:
1.__int16 IC_Write_102(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:写数据到102卡,不负责擦除(即只能从“1”写“0”,不能从“0”写“1”)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡起始地址
__int16 len ---- 数据的长度
unsigned char * databuffer ---- 即将写入IC卡的数据并存放返回数据
返回:<0 错误。见错误码
=0 正确。
举例:IC_Write_102(idComDev,32,14,"IcCard Message")
将IcCard Message写入从32地址开始的数据区。

2.__int16 IC_Read_102(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:读取102卡数据
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 读数据IC卡起始地址
__int16 len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
返回:<0 错误。见错误码
=0 正确。
举例:IC_Read_102 (idComDev,16,64, databuffer)
读取16至79的数据到databuffer,正确返回0。

3.__int16 IC_ReadCount_102(HANDLE idComDev)
说明:读取102卡密码计数器值
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
>=0 密码计数器计数值。此值表示试密码的机会。最大值为8,表示还有8次机会,最小
值为0,表示已经无法再校验密码。
举例:IC_ReadCount_102 (idComDev)

4.__int16 IC_CheckPass_102(HANDLE idComDev, unsigned char* Password)
说明:校验密码(用于102型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 2字节
返回:<0 错误。见错误码
=0 校验密码正确
举例:IC_CheckPass_102(idComDev,"11")
校验卡密码11。

5.__int16 IC_ChangePass_102(HANDLE idComDev, unsigned char* Password)
说明:更改密码(用于102型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 2字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_102 (idComDev,"22")
将卡密码改为22。

6.__int16 IC_CheckAPass_102(HANDLE idComDev, __int16 zone, unsigned char* Password)
说明:校验应用区密码(102卡),如果密码正确,将擦除该区的数据,即全部置为"FF"
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone ---- 102卡的应用区号
unsigned char * Password ---- 应用区密码
应用区一的擦除密码为六个字节,从偏移址86开始,缺省为16进
制FFFFFFFFFFFF;
应用区二的擦除密码为四个字节,从偏移址156开始,缺省为16进
制FFFFFFFF。
返回:<0 错误。见错误码
=0 操作成功,但并不表示密码正确,只有检查是否擦除才能判断。
举例:IC_CheckAPass_102 (idComDev,1,"111111")
校验应用区一,密码为"111111"。

7.__int16 IC_ChangeAPass_102(HANDLE idComDev, __int16 zone, unsigned char* Password)
说明:更改应用区密码(102卡),烧熔丝前密码可改
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone ---- 102卡的应用区号
unsigned char * Password ---- 应用区密码
应用区一的擦除密码为六个字节,从偏移址86开始,缺省为0xFFFFFFFFFFFF;
应用区二的擦除密码为四个字节,从偏移址156开始,缺省为0xFFFFFFFF。
返回:<0 错误。见错误码
=0 操作成功
举例:IC_ChangeAZPass_102(idComDev,1,"222222")
将应用区一的密码改为"222222"。

8.__int16 IC_CheckPass_102hex(HANDLE idComDev, unsigned char* Password)
说明:以十六进制方式校验密码(用于102型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 卡密码 4字节
返回:<0 错误。见错误码
=0 校验密码正确
举例:IC_CheckPass_102hex(idComDev,"3131")
校验卡密码11。(31H 31H)

9.__int16 IC_ChangePass_102hex(HANDLE idComDev, unsigned char* Password)
说明:以十六进制方式更改密码(用于102型)
调用:HANDLE idComDev ---- InitComm返回的设备描述符
unsigned char * Password ---- 新密码 4字节
返回:<0 错误。见错误码
=0 更改密码正确
举例:IC_ChangePass_102hex (idComDev,"3232")
将卡密码改为22。(32H 32H)


10.__int16 IC_CheckAPass_102hex (HANDLE idComDev, __int16 zone, unsigned char* Password)
说明:以十六进制方式校验应用区密码(102卡),如果密码正确,将擦除该区的数据,即全部置为0xFF。
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone ---- 102卡的应用区号
unsigned char * Password ---- 应用区密码
应用区一的擦除密码为12个字节,从偏移址86开始,缺省为”FFFFFFFFFFFF”;
应用区二的擦除密码为8个字节,从偏移址156开始,缺省为”FFFFFFFF”。
返回:<0 错误。见错误码
=0 操作成功,但并不表示密码正确,只有检查是否擦除才能判断。
举例:IC_CheckAPass_102hex (idComDev,1,"313131313131")
校验应用区一,密码为"111111"。

11.__int16 IC_ChangeAPass_102hex (HANDLE idComDev, __int16 zone, unsigned char* Password)
说明:以十六进制方式更改应用区密码(102卡),烧熔丝前密码可改。
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone ---- 102卡的应用区号
unsigned char * Password ---- 应用区新密码
应用区一的擦除密码为12个字节,从偏移址86开始,缺省为”FFFFFFFFFFFF”;
应用区二的擦除密码为8个字节,从偏移址156开始,缺省为”FFFFFFFF”。
返回:<0 错误。见错误码
=0 操作成功。
举例:IC_ChangeAPass_102hex (idComDev,1,"313131313131")
更改应用区一,新密码为"111111"。


12.__int16 IC_Fuse_102(HANDLE idComDev)
说明:烧102卡的熔丝
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
=0 正确。
举例:IC_Fuse_102(idComDev)

13.__int16 IC_Erase_102(HANDLE idComDev,__int16 offset,__int16 len)
说明:擦除数据(102型),用于烧熔丝之前的卡
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 擦除的起始地址
__int16 len ---- 擦除字节数
返回:<0 错误。见错误码
=0 正确。
举例:IC_Erase_102 (idComDev,24,32)
擦除从绝对偏移址开始的32个字节。

14.__int16 IC_EWrite_102(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:先擦除,再写入(相当于先调用IC_Erase_102,再调用IC_Write_102)
调用:同IC_Write_102
HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡起始地址
__int16 len ---- 数据的长度
unsigned char * databuffer ---- 即将写入IC卡的数据并存放返回数据
返回:<0 错误。见错误码
=0 正确。
举例:IC_EWrite_102(idComDev,32,14,"IcCard Message")
将IcCard Message写入从32地址开始的数据区。

15.__int16 IC_EWrite_102Hex(HANDLE idComDev,__int16 offset,__int16 len, unsigned char * databuffer)
说明:按16进制数,先擦除,再写入
调用:同IC_EWrite_102
HANDLE idComDev ---- InitComm返回的设备描述符
__int16 offset ---- 写IC卡起始地址
__int16 len ---- 数据的长度(注意是字节数,不是整数位数)
unsigned char * databuffer ---- 即将写入IC卡的数据并存放返回数据(注意缓冲区大小为
len的2倍)
返回:<0 错误。见错误码,-1为非整数字符,如“t”,“M”等。
=0 正确。
举例:IC_EWrite_102Hex (idComDev,32,4,"1543a5c9")
将1543a5c9写入从32地址开始的数据区。
IC卡存储4个字节为15H,43H,A5H,C9H。


六、AT88SC1604卡函数:
1.__int16 IC_Fuse_1604(HANDLE idComDev)
说明:烧1604卡的熔丝*
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
=0 正确。
举例:IC_Fuse_1604(idComDev)

2.__int16 IC_ReadCount_1604(HANDLE idComDev,__int16 area)
说明:读取102卡密码计数器值
调用:HANDLE ICDev ---- InitComm返回的设备描述符
Area:为要读错误计数的类型,
0: 卡的总密码错误计数
1: AT88SC1604卡第一区的密码错误计数
11: AT88SC1604卡第一区的擦除密码错误计数
12: AT88SC1604卡第二区的擦除密码错误计数
13: AT88SC1604卡第三区的擦除密码错误计数
14: AT88SC1604卡第四区的擦除密码错误计数
返回:<0 错误。见错误码
>=0 密码计数器计数值。此值表示试密码的机会。最大值为8,表示还有8次机会,最小
值为0,表示已经无法再校验密码。
举例:IC_ReadCount_1604(ICDev,0)

3.__int16 IC_CheckPass_1604(HANDLE idComDev,__int16 area,unsigned char * password)
说明:校验密码
调用:HANDLE idComDev ---- InitComm返回的设备描述符
Area:为要效验的密码类型,
0: 卡的总密码
1: AT88SC1604卡第一区的密码
2: AT88SC1604卡第二区的密码
3: AT88SC1604卡第三区的密码
4: AT88SC1604卡第四区的密码
11: AT88SC1604卡第一区的擦除密码
12: AT88SC1604卡第二区的擦除密码
13: AT88SC1604卡第三区的擦除密码
14: AT88SC1604卡第四区的擦除密码
unsigned char * Password ---- 卡密码 2字节
返回:<0 错误。见错误码
=0 效验密码正确
举例:IC_CheckPass_1604(idComDev,0,"11")
效验卡密码为"11"。

4.__int16 IC_ChangePass_1604(HANDLE idComDev,__int16 area,unsigned char * password)
说明:改变密码
调用:HANDLE idComDev ---- InitComm返回的设备描述符
Area:为要改变的密码类型,
0: 卡的总密码
1: AT88SC1604卡第一区的密码
2: AT88SC1604卡第二区的密码
3: AT88SC1604卡第三区的密码
4: AT88SC1604卡第四区的密码
11: AT88SC1604卡第一区的擦除密码
12: AT88SC1604卡第二区的擦除密码
13: AT88SC1604卡第三区的擦除密码
14: AT88SC1604卡第四区的擦除密码
unsigned char * Password ---- 卡密码 2字节
返回:<0 错误。见错误码
=0 改变密码正确
举例:IC_CheckPass_1604(idComDev,0,"22")
改变密码为“22”。

5.__int16 IC_CheckPass_1604hex(HANDLE idComDev,__int16 area,unsigned char * password)
说明:以十六进制方式校验密码
调用:unsigned char * Password ---- 卡密码 4字节
其余同IC_CheckPass_1604。
返回:<0 错误。见错误码
=0 改变密码正确
举例:IC_CheckPass_1604hex (idComDev,0,"4243")
校验密码为“BC”,即42H 43H。

6.__int16 IC_ChangePass_1604hex (HANDLE idComDev,__int16 area,unsigned char * password)
说明:以十六进制方式改变密码
调用:unsigned char * Password ---- 卡密码 4字节
其余同IC_ChangePass_1604。
返回:<0 错误。见错误码
=0 改变密码正确
举例:IC_ChangePass_1604hex (idComDev,0,"4141")
改变密码为“AA”,即41H 41H。



七、AT88SC1608卡函数(用于2.0以后版本)
1.__int16 IC_CheckAZPass_1608(HANDLE idComDev, __int16 offset,unsigned char * PassWord)
说明:校验1608卡用户区密码
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone: ----为要校验密码的区位和类型,
0: AT88SC1608卡第一区的读写密码
1: AT88SC1608卡第二区的读写密码
2: AT88SC1608卡第三区的读写密码
3: AT88SC1608卡第四区的读写密码
4: AT88SC1608卡第五区的读写密码
5: AT88SC1608卡第六区的读写密码
6: AT88SC1608卡第七区的读写密码
7: AT88SC1608卡第八区的读写密码
8: AT88SC1608卡第一区的只读密码
9: AT88SC1608卡第二区的只读密码
10: AT88SC1608卡第三区的只读密码
11: AT88SC1608卡第四区的只读密码
12: AT88SC1608卡第五区的只读密码
13: AT88SC1608卡第六区的只读密码
14: AT88SC1608卡第七区的只读密码
15: AT88SC1608卡第八区的只读密码

unsigned char * PassWord ----密码,六位十六进制数。

返回:<0 错误。见错误码
=0 正确。
举例:IC_CheckAZPass_1608 (idComDev,0,0xFFFFFF)

2.__int16 IC_CheckAZPass_1608hex(HANDLE idComDev, __int16 offset,unsigned char * PassWord)
说明:以十六进制方式校验1608卡用户区密码
调用:unsigned char * PassWord ----密码,6字节。
其余同IC_CheckAZPass_1608。
返回:<0 错误。见错误码
=0 正确。
举例:IC_CheckAZPass_1608hex (idComDev,0,”343434”)

3.__int16 IC_ChangeAZPass_1608(HANDLE idComDev, __int16 offset,unsigned char * PassWord)
说明:变更1608卡用户区密码
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone: ----为要变更密码的区位和类型,
0: AT88SC1608卡第一区的读写密码
1: AT88SC1608卡第二区的读写密码
2: AT88SC1608卡第三区的读写密码
3: AT88SC1608卡第四区的读写密码
4: AT88SC1608卡第五区的读写密码
5: AT88SC1608卡第六区的读写密码
6: AT88SC1608卡第七区的读写密码
7: AT88SC1608卡第八区的读写密码
8: AT88SC1608卡第一区的只读密码
9: AT88SC1608卡第二区的只读密码
10: AT88SC1608卡第三区的只读密码
11: AT88SC1608卡第四区的只读密码
12: AT88SC1608卡第五区的只读密码
13: AT88SC1608卡第六区的只读密码
14: AT88SC1608卡第七区的只读密码
15: AT88SC1608卡第八区的只读密码

unsigned char * PassWord ----密码,六位十六进制数。

返回:<0 错误。见错误码
=0 正确。
举例:IC_ChangeAZPass_1608 (idComDev,0,FFFFFF)

4.__int16 IC_ChangeAZPass_1608hex(HANDLE idComDev, __int16 offset,unsigned char * PassWord)
说明:以十六进制方式变更1608卡用户区密码。
调用:unsigned char * PassWord ----密码,6字节。
其余同IC_ChangeAZPass_1608。
返回:<0 错误。见错误码
=0 正确。
举例:IC_ChangeAZPass_1608hex (idComDev,0,”343434”)


5.__int16 IC_ReadCount_1608(HANDLE idComDev,__int16 zone)
说明:读取1608卡密码计数器值
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone: ----为要读错误计数的类型,
0: AT88SC1608卡第一区的密码读写错误计数
1: AT88SC1608卡第二区的密码读写错误计数
2: AT88SC1608卡第三区的密码读写错误计数
3: AT88SC1608卡第四区的密码读写错误计数
4: AT88SC1608卡第五区的密码读写错误计数
5: AT88SC1608卡第六区的密码读写错误计数
6: AT88SC1608卡第七区的密码读写错误计数
7: AT88SC1608卡第八区的密码读写错误计数
8: AT88SC1608卡第一区的密码只读错误计数
9: AT88SC1608卡第二区的密码只读错误计数
10: AT88SC1608卡第三区的密码只读错误计数
11: AT88SC1608卡第四区的密码只读错误计数
12: AT88SC1608卡第五区的密码只读错误计数
13: AT88SC1608卡第六区的密码只读错误计数
14: AT88SC1608卡第七区的密码只读错误计数
15: AT88SC1608卡第八区的密码只读错误计数
16: AT88SC1608卡认证错误计数

返回:<0 错误。见错误码
>=0 密码计数器计数值。此值表示试密码的机会。最大值为8,表示还有8次机会,最小
值为0,表示已经无法再校验密码。
举例:IC_ReadCount_1608(idComDev,0)

6.__int16 IC_Fuse_1608(HANDLE idComDev)
说明:烧1608卡的熔丝*
调用:HANDLE idComDev ---- InitComm返回的设备描述符
返回:<0 错误。见错误码
=0 正确。
举例:IC_Fuse_1608(idComDev)

7.__int16 IC_ChangeZone_1608(HANDLE idComDev,__int16 zone,unsigned char Data)
说明:变更1608卡用户区寄存器设置
调用:HANDLE idComDev ---- InitComm返回的设备描述符
__int16 zone ---- 用户区代号
0: AT88SC1608卡第一区寄存器
1: AT88SC1608卡第二区寄存器
2: AT88SC1608卡第三区寄存器
3: AT88SC1608卡第四区寄存器
4: AT88SC1608卡第五区寄存器
5: AT88SC1608卡第六区寄存器
6: AT88SC1608卡第七区寄存器
7: AT88SC1608卡第八区寄存器

unsigned char Data ----寄存器数据(注意本参数类型)
返回:<0 错误。见错误码
=0 正确。
举例:IC_ChangeZone_1608(idComDev, 0, 0xfe)

八、AT45DB041卡函数:
1.__int16 IC_DirectRead (HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:读取IC卡数据,直接读
调用:int idComDev ---- InitComm返回的设备描述符
int page ---- 要读的页
int offset ---- 读数据IC卡起始地址
int len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
返回:<0 错误。见错误码
=0 成功。
举例:IC_DirectRead (idComDev,0,16,64, databuffer)
读取0页16至79的数据到databuffer,正确返回0。

2.__int16 IC_DirectWrite (HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:向IC卡内写数据,直接写
调用:int idComDev ---- InitComm返回的设备描述符
int page ---- 要写的页
int offset ---- 写数据IC卡起始地址
int len ---- 数据长度
unsigned char * databuffer ---- 存放数据的缓冲区
返回:<0 错误。见错误码
=0 成功。
举例:IC_DirectWrite (ICDev,0,0,264, databuffer)
写0页264个的字节的数据到卡,正确返回0。

3.__int16 IC_WriteByBuffer(HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:缓冲区写,使用方法同IC_ DirectWrite可以写任意长度的字符.

4.__int16 IC_DirectRead_Hex (HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:按16进制数,读取IC卡数据,直接读
调用:int idComDev ---- InitComm返回的设备描述符
int page ---- 要读的页
int offset ---- 读数据IC卡起始地址
int len ---- 数据长度(注意是字节数,不是整数位数)
unsigned char * databuffer ---- 存放数据的缓冲区(注意缓冲区大小为
len的2倍)
返回:<0 错误。见错误码
=0 成功。
举例:如IC卡第0页0~3字节存储12h,34h,56h,abh
IC_DirectRead_Hex (idComDev,0,0,4, databuffer)
读取0至3的数据到databuffer,正确返回0,databuffer储存“123456ab”。


5.__int16 IC_DirectWrite_Hex (HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:按16进制数,向IC卡内写数据,直接写
调用:int idComDev ---- InitComm返回的设备描述符
int page ---- 要写的页
int offset ---- 写数据IC卡起始地址
int len ---- 数据长度(注意是字节数,不是整数位数)
unsigned char * databuffer ---- 存放数据的缓冲区(注意缓冲区大小为
len的2倍)
返回:<0 错误。见错误码,-1为非整数字符,如“t”,“M”等。
=0 成功。
举例:IC_DirectWrite_Hex (idComDev,1,32,4,"1543a5c9")
将1543a5c9写入第1页从32地址开始的数据区。
IC卡存储4个字节为15H,43H,A5H,C9H。


6.__int16 IC_WriteByBuffer_Hex (HANDLE idComDev,__int16 page,__int16 offset,__int16 len, unsigned char * databuffer)
说明:按16进制数,缓冲区写,使用方法同IC_DirectWrite_Hex可以写任意长度的字符.


<三>补充说明

1、读操作时一定要留有存放数据的缓冲区,可用SPACE(LEN)的格式。
2、必须在执行其它操作前,先初始化串口。
3、通用读写函数不能用于45DB041卡,其写函数用于ATMEL102卡时会出现误擦除错误,不建议使用。
4、1608卡标志寄存器区的地址映射于用户区之后,地址范围在0800H~087FH。
5、1608卡及其它部分函数只能用于2.0版本以后的读卡器,否则可能出现不可预料的错误。使用时务必注意。
6、错误代码如下:
-1: 异常错误
-82H: 通信出错
-83H: 密码校验错
-86H: 无卡
00H: 正确
7、卡型代码如下:
0x0002: SLE4406(未用)
0x0004: SLE4418/4428
0x0006: GEMPLUS 103(未用)
0x0008: SLE4404(未用)
0x0010: SLE4432/4442
0x0020: ATMEL101/102/103
0x0041: ATMEL45DB041
0x0040: ATMEL24C01A/02/04/08/16
根据高八位是 0x0140:24C01A
0x0240:24C02
0x0440:24C04
0x0840:24C08
0x1640:24C16
0x0090: ATMEL88SC1608
0x00a0: ATMEL1604/1604B
0x00c0: ATMEL24C64

 
我们公司生产各类接触式和非接触式IC卡,我在公司做IC卡读写编程,大家有兴趣可以
和我交流wenhua.cai@sohu.com
 
后退
顶部