关于读写器读写IC卡的问题(100分)

  • 主题发起人 主题发起人 YouFuPeng
  • 开始时间 开始时间
Y

YouFuPeng

Unregistered / Unconfirmed
GUEST, unregistred user!
现有读写器和IC卡,也知道IC卡读写器通讯协议,
想在Delphi中实现读卡和写卡,但没有现成的动态链接库读写函数,
该如何在Delphi中处理读写器通讯协议来实现读卡和写卡?
请知道该问题的朋友知无不言,言无不尽!多谢!
 
自己根据协议写一个不就行了
 
to jamcky:
我就是不知道如何根据协议来实现,这位大哥,你既然知道,就告诉我吧!
 
呵呵,这个一下子是说不清的,大概就是通过你的读写器接口(一般是串口),根据协议发送命令,然后收回数据,根据协议分析数据就可以了
 
to jamcky:
如何通过串口根据协议发送命令?用不用串口通信控件?
能否给个例子?
 
可以使用mscomm控件来发送协议指令
 
to NewLearner:
请问怎样使用mscomm控件来发送协议指令?
发送到串口的是字符,发送协议指令和发送字符一样吗?
 
1、要知道通讯协仪
2、要知道IC卡初始密码
 
楼主钻研精神不够
 
to dxwleaf:
现在知道
1、通讯协仪
2、IC卡初始密码
但具体该怎么办?

to CurveSoft:
如果你知道,就告诉我吧!我真是诚心诚意的请教!
 
我用一个串口通讯的小程序,可以在两台机器上发送和接收字符数据,
但往读写器上发送协议指令后(根据通讯协议),却什么也接收不到,
好像读写器没有反应,不知为什么?哪位朋友知道其中道理请告知一二!
 
谁来帮帮我?
 
我有一个IC卡读写程序,适用于很多卡,用起来简单方便。
如需要请与87797301 联系!可提供源代码!是用delphi来调用api写的
 
你的协议是否详细,那些指令是不是有一定的先后顺序,例如必须发送了XX指令才能发YY指令,还有,读写器是否需要初始化,初始化指令的顺序等,还有数据格式等等,必须完全的符合读写器的要求才能行,不知道你的协议里面是否有详细的说明,如果有的话按照协议来做就行了。
 
现将读写器通讯协议全文发出,谁能告诉我如何向读写器发送指令?
卡类型是SEMENS 4442。
IC卡读写器通讯协议

通用型IC卡读写器(89C52)可读写ATMEL 24C01A/02/04/08/16/32/64
存储卡,ATMEL 88SC102/1604/1608/153 逻辑加密型IC卡,SE4432/42IC卡.
其命令格式如下:
1. 命令格式
(1) 选卡类型
C0 类型号
类型号=01 ATMEL 24C01A(1K位卡)
=02 ATMEL 24C02 (2K位卡)
=04 ATMEL 24C04 (4K位卡)
=08 ATMEL 24C08 (8K位卡)
=16 ATMEL 24C16 (16K位卡)
=45 ATMEL 45D041 (4M位卡,Singulated Module 封装)
=46 ATMEL 45D041 (4M位卡,ABS Card 封装)
=A1 ATMEL 88SC102/1604
=A2 ATMEL 88SC1608
=A3 ATMEL 88SC153
=B1 SEMENS 4432/4442
=32 ATMEL 24C32 (32K位卡)
=64 ATMEL 24C64 (64K位卡)
读写器上电后默认的卡类型为24C01A卡,通过选卡类型
命令选择其它类型卡后,以后的读写都针对此种卡直至
再选择其它卡类型或读写器断电

(2) 上电
B0

(3) 下电
B1

(4) 应答复位(ATMEL 88SC1608/153,SE4432/42)
B2

(5) 校验密码--带错误计数(102/1604、1608/153、4442)
A0 AD1 AD2 LEN byte1…byten (88SC102/1604,4442)
A0 INDEX MM1 MM2 MM3 (88SC1608/153)
INDEX (88SC153)
00 第0套写密码
01 第1套写密码
02 第0套读密码
03 第1套读密码

(6) 校验密码--不带错误计数(ATMEL 88SC102/1604)
A1 AD1 AD2 LEN byte1…byten

(7) 密码认证(ATMEL 88SC1608/153)
A2 Ci(8字节) Gc(8字节) Q0(8字节)

(8) 读卡(24CXX,102/1604,1608/153,4442,45D041)
D0 AD1 AD2 LEN (24CXX,102/1604,1608/153,4442)
D0 AD1 AD2 AD3 LEN (45D041)
D1 读AT45D041 状态寄存器


(9) 写卡(24CXX,102/1604,1608/153,4442,45D041)
E0 AD1 AD2 LEN byte1…byten (24CXX,102/1604,1608/153,4442)
E0 AD1 AD2 AD3 LEN (45D041)
E1 AD1 AD2 AD3 LEN (45D041 直接写,不擦除)

(10) 熔断(ATMEL 88SC102/1604,1608,153)
F0 AD1 AD2 (ATMEL 88SC102/1604)
F0 (ATMEL 88SC1608)
F0 byte1 (ATMEL 88SC153)
byte1 -- 熔断数据

(11) 读熔断状态(ATMEL 88SC1608/153)
F1

(12) 返回信息
CODE LEN byte1…byten
CODE=03 操作正确
=01 读写地址超出
=04 操作错误(卡不反应或密码校验错误)
=05 命令错
=06 IC卡未上电
=02 读写器中无卡
------------------------------------------------------
注∶ AD1----读、写的地址第一个字节,读写1608卡时00-07
为用户区0-7,08为Configuration区;读写4442
卡时00为读写主存储区,01为读写保密代码区,
02为读写保护区
AD2----读、写的地址第二个字节
AD3----读、写的地址第三个字节
LEN----读、写的字节数,写字节数不超过40H(64)
byte---读、写的数据
MM1----密码第一个字节
MM2----密码第二个字节
MM3----密码第三个字节
INDEX----密码索引

2. 举例
每个命令都是一个字符串
(1) 校验ATMEL 1608密码
"A20717ABDC "
(2) 从卡0地址读出40H字节
"D0000040 "
(3) 向卡10H地址写数据"1122334455667788"
"E00010081122334455667788 "
(4) 以上各例子的返回信息
1) "0300"
2) "0340byte1…byte64"
3) "0300"
4) IC卡不反应的返回信息"0400"
 
谁来帮帮我!
 
你用的什么串口通讯的小程序,发送字符要用16进制格式发送。另外要看一下读写之前是否需要执行其他操作,如上电,初始化等。
 
多人接受答案了。
 
后退
顶部