高手救命!!!----关于IC卡的一系列问题!!??

supsuccess 2002-04-05 07:43:38
各位高高手、大大侠:
您好!
最近公司要给一家医院作一个项目,但是客户要求病人要使用IC卡!我从来也没有接触过这个东西,没办法,只好求大家了!希望作过类似项目的大哥帮帮忙!
1.IC卡的卡号唯一吗?可以存储什么信息?比如病人姓名、家庭住址等信息可以存储吗?可以存储余额(每次看病减掉一部分钱)吗?
2.使用IC卡是不是需要读卡器,还需要什么东西?读卡器怎样跟主机相连?
3.IC卡读卡器怎样跟程序(PB)联系起来?据说是调用DLL,不知道效果怎样?
4.是不是一种读卡器只能读一种卡?
5.您能提供给我某种型号的读卡器和它使用的IC卡的资料吗?因为我没有见过这个东西...:(

6.分不够可以在加...
再次感谢!
...全文
112 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangss 2002-04-10
  • 打赏
  • 举报
回复
你不用担心,ic卡厂商会提供给你信息的:)
luoshumeng 2002-04-10
  • 打赏
  • 举报
回复
IC卡密码错误计数不是全都是8次的,有的只有3次,有的有8次,有的还有多个分区
luoshumeng 2002-04-10
  • 打赏
  • 举报
回复
我想医院用卡也许不会普通的逻辑加密卡,可能会用CPU卡,我们公司的IC卡读写器在中国来说,应该可以算是比较强的了,广铁的医保就是采用我们的设备和IC卡,如果想知道更多,可联系我!
Leehunter 2002-04-10
  • 打赏
  • 举报
回复
如果需要用户输入密码的话,这个密码称为PIN,即个人识别号的意思。
在逻辑加密卡中,实际上是写在卡中的一个8(或者6)字节的数字字符串。
逻辑加密卡本身的密码,即有8次机会的密码,一般用于机卡认证。都是在程序中对卡片进行认证的。
严谨一点说:
逻辑加密卡的密钥,是用来验证卡片的合法性,并且获得写卡片的权限的(只要上电就可以读卡片,读卡片不需要通过密码验证)。
用户掌握的密码PIN,是用来验证持卡人的身份的。表明持卡人是否为卡片的合法持有人。
supsuccess 2002-04-10
  • 打赏
  • 举报
回复
TO leehunter(理性猎人) :
多谢!再问个问题,不好意思:
那么用户在插卡的时候,输入的“密码”是怎么来得?
是我们定义的密码?
还是加密卡中你说的有8次机会的“密码”呢?
supsuccess 2002-04-10
  • 打赏
  • 举报
回复
谢谢!
尤其感谢----linger_liang(灵儿)、ldy(罗大佑) 、llitcwl(中国龙) leehunter(理性猎人)!
以后少不了麻烦呀!!!:)
结!
albert_qhd 2002-04-09
  • 打赏
  • 举报
回复
可以买COMSYS的p210。可以读很多卡。如ATMEL系列的存储卡,西门子的加密卡等都没有问题。
Leehunter 2002-04-09
  • 打赏
  • 举报
回复
一般的医保卡都使用逻辑加密卡,可以采用西门子系列的sle4428,sle4442。
逻辑加密卡是采用逻辑电路加密的。密码存放于卡中的特定位置,通过验证后可以读出来,也可以修改。
密码有8次重试的机会,超过8次卡片锁死,并且不能解锁。但是只要有一次正确,则出错计数器会重新归为零。
sle4428的密码长度为2字节,sle4442的密码长度为3字节。该密码一般不由用户掌握,但是由于密码较短,而且可以通过监听的方法得到。所以一般都采用一卡一密的方式保证用户卡的安全性。有些系统还通过锁定一些数据,并且对这些数据进行加密来确认用户卡的合法性。
实际上,可以把卡当作容量不大的磁盘。可以写入姓名,ID,地址,联系电话等信息。如果全部是联网使用的话,只要写一个ID,其它的都在数据库中查找就可以了。
...
llitcwl 2002-04-09
  • 打赏
  • 举报
回复
比较简单的办法是在IC中只存放用户的ID,其他信息都放在数据库,这样应该知道做了吧!
Leehunter 2002-04-09
  • 打赏
  • 举报
回复
你在什么地方?我对IC卡行业很熟,可以交流一下。
supsuccess 2002-04-09
  • 打赏
  • 举报
回复
谢谢各位!
这两天稍微了解了一点...不过心理上仍然发虚...:)
另外:
加密存储卡的所谓“加密”是什么意思?此“密码”可以修改吗?
怎样保证用户卡的“安全性”呢?
象我这种情况,应该怎样设计数据库呢?----既:在“卡中”应该存储什么东西?
njscorpio 2002-04-07
  • 打赏
  • 举报
回复
也有的医院用卡,但是不用读卡器,输入卡号的

读卡器有自己的驱动,不通用的。
531MT 2002-04-06
  • 打赏
  • 举报
回复
http://asp.6to23.com/my8848/list.asp?id=197
这个餐饮娱乐系统中有关于IC卡读写的源代码。
不知道对你有没有帮助!
Rasky 2002-04-06
  • 打赏
  • 举报
回复
对对对,非常赞成ldy(罗大佑)的说法。
电脑城大把
HUANG_JH 2002-04-06
  • 打赏
  • 举报
回复
to :songxing()
公司正在做系统调研,我希望能够参考一些资料,谢谢!

webmaster@bcroad.51.net
supsuccess 2002-04-06
  • 打赏
  • 举报
回复
多谢:songxing() 老兄、大侠...:)
supsuccess@sohu.com
supsuccess 2002-04-06
  • 打赏
  • 举报
回复
多谢各位,但是怎么我找了半天也没在市场上找到任何一种读卡器...:(
难道是我在的地方太小?
准备结贴!!!
pingkeke 2002-04-06
  • 打赏
  • 举报
回复
会提供.Dll和调用方式。
dotnba 2002-04-06
  • 打赏
  • 举报
回复
其实由于IC卡的厂家不同,其存储能力(512Bits,1024Bits...)、存储格式、加密方式都可能不同。但是当你向其购买IC卡及其读写器时,他一般会提供.Dll和调用方式。
dotnba 2002-04-06
  • 打赏
  • 举报
回复
string tempData,g_data
long Ret
string str,p_name,r_no
int i
datetime dt_in,dt_out

G_Data = '00000000000000000000000000000000000000000000000000' + &
'00000000000000000000000000000000000000000000000000'

if isnull(lv_1.SelectedIndex()) or lv_1.SelectedIndex() = -1 then
messagebox("提示信息","请选择房间!")
else
Ret = open_comm(1) //打开串口1
If Ret<>0 then
Ret = open_comm(2) //打开串口2
End if
If Ret<>0 then
MessageBox('提示','不能打开串口')
Ret = close_comm()
return
End if
Ret = SLE4428CardStatus(G_Data)
tempData = Mid(G_Data,7,2)
If tempData <> '01' Then
MessageBox('提示','请连接好读写器或插入卡片!')
Ret = close_comm()
return
End if

Ret = SLE4428Reset(G_Data)
tempData = Mid(G_Data,7,8)
if tempData <> '92231091' Then
MessageBox('提示','卡类型不对或卡插反,请换卡!')
Ret = close_comm()
return
End if

SetPointer(HourGlass!)
//UserID
Ret = SLE4428Read('0020','10',G_Data)
Ret = close_comm()
str = Asc2ToHex1(mid(G_Data,7,32))
SetPointer(Arrow!)
select count(*) into :i from person where person_id=:str;
if i=0 then
messagebox("提示信息","系统不能识别您的用户身份!")
else
select person_name into :p_name from person where person_id=:str;
select count(*) into :i from person_rest where person_id=:str and out_room_time =null;
if i = 0 then
lv_1.getitem(lv_1.SelectedIndex(),1,r_no)
if messagebox("提示信息","'" + p_name + "'是否要在" + r_no + "号房间休息?",question!,yesno!,1)=1 then
insert into person_rest(person_id,room_no,in_room_time) values(:str,:r_no,getdate());
commit;
dw_1.retrieve()
lb_1.additem(p_name)
end if
else
select room_no,in_room_time,getdate() into :r_no,:dt_in,:dt_out from person_rest where person_id=:str and out_room_time =null;
if messagebox("提示信息","在" + r_no + "号房间休息的'" + p_name + "'是否要离开?",question!,yesno!,1)=1 then
if fun_datetime_After(dt_in,dt_out) > 8 * 3600 then
update person_rest set out_room_time = :dt_out where person_id=:str and out_room_time =null;
commit;
dw_1.retrieve()
lb_1.deleteitem(lb_1.finditem(p_name,0))
else
if messagebox("提示信息","'" + p_name + "'休息时间为"+ string(round(fun_datetime_After(dt_in,dt_out) / 3600,1)) + "小时,不符合要求,是否可以离开?",question!,yesno!,2)=1 then
update person_rest set out_room_time = :dt_out where person_id=:str and out_room_time =null;
commit;
dw_1.retrieve()
lb_1.deleteitem(lb_1.finditem(p_name,0))
end if
end if
end if
end if
end if
end if
加载更多回复(12)

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧