读卡器的問題

ewindows98 2011-03-09 08:53:08
有一個读卡器,是USB 接口的,不需要驅動(當然是win2000或xp系統下), 當用戶刷ID卡(非接觸式的)時, 電腦會接受一個10位的物理號碼(全是0-9的數字),就像鍵盤輸入的一樣.

我想做一個身份驗證的程序,當用戶一刷卡時(只有一個刷卡的動作,不用點擊任何按鍵), 接受這個10位號碼, 與數據庫預存的數據比對,比對一致通過,否則報錯.

我是這樣處理的: 在Form 上放一個Edit控件(不可見), 接受刷卡的數據,
問題的重點是:我不知道在Edit的什么時件中寫這個比對的代碼, 而且Edit的Text會一直累加刷卡的號碼

請教各位,如何實現,或者是我這種方式不正確

謝謝!

...全文
269 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ewindows98 2011-12-25
  • 打赏
  • 举报
回复
多謝各位,最終我是在formkeypress中判断输入长度,再比對的
还是江筱吧 2011-04-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ewindows98 的回复:]
引用 9 楼 hellomicrosoft 的回复:

哈哈 我最近用的就是这种id读卡器。 这类读卡器一般都有参数可调的,就是几个开关,你可以设置读到数据后追加一个回车进去,这样你就能 判断回车事件了,这样是最保险的,而且像这种被动刷卡的一般都是这么做的


我这种id读卡器沒有什么參數可調,usb接口,插上去就可用,沒有任何開關
[/Quote]
如果真的不能截到回车的话 那你只能在keypress中判断输入长度了,如果你的id是固定10位的话
jinhx 2011-03-31
  • 打赏
  • 举报
回复
读卡器应该最后都加回车的,可以用keypress事件,逐个把字符合起来不就是一串了吗.收到#13后就比对
还是江筱吧 2011-03-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ewindows98 的回复:]
引用 9 楼 hellomicrosoft 的回复:

哈哈 我最近用的就是这种id读卡器。 这类读卡器一般都有参数可调的,就是几个开关,你可以设置读到数据后追加一个回车进去,这样你就能 判断回车事件了,这样是最保险的,而且像这种被动刷卡的一般都是这么做的


我这种id读卡器沒有什么參數可調,usb接口,插上去就可用,沒有任何開關
[/Quote]


难道刷出来编码之后 不会添加回车?
heqxmail 2011-03-17
  • 打赏
  • 举报
回复
你可以把edit放出来 当密码框使用 显示字符******
heqxmail 2011-03-17
  • 打赏
  • 举报
回复
你用的是通用的读卡器 在鼠标焦点处输入射频卡物理卡号
不像我们用DLL或操作读卡器读出物理卡号
放1个timer
procedure TForm1.Timer1Timer(Sender: TObject);
var
sCardid:string;
begin
Timer1.Enabled:=False;
Edit1.SetFocus; //edit1获取焦点
if Trim(Edit1.Text)='' then
begin
Timer1.Enabled:=True
end
else
begin
sCardid:=Trim(Edit1.Text);
//送入卡号 检索数据库
end;
end;

试试看
ewindows98 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ckc 的回复:]
按我的理解你已经读到了数据,因为你说Edit的Text會一直累加刷卡的號碼
那你就在edit的文本变更事件中写代码啊
首先检查text有没有10位,
有了10位再和数据库中的比较,正确/不正确应该怎么处理你自己想
处理完之后清除text
[/Quote]



第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!

ewindows98 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hellomicrosoft 的回复:]

哈哈 我最近用的就是这种id读卡器。 这类读卡器一般都有参数可调的,就是几个开关,你可以设置读到数据后追加一个回车进去,这样你就能 判断回车事件了,这样是最保险的,而且像这种被动刷卡的一般都是这么做的
[/Quote]

我这种id读卡器沒有什么參數可調,usb接口,插上去就可用,沒有任何開關
ckc 2011-03-13
  • 打赏
  • 举报
回复
按我的理解你已经读到了数据,因为你说Edit的Text會一直累加刷卡的號碼
那你就在edit的文本变更事件中写代码啊
首先检查text有没有10位,
有了10位再和数据库中的比较,正确/不正确应该怎么处理你自己想
处理完之后清除text
差布多先生 2011-03-13
  • 打赏
  • 举报
回复
读取到序列号信息后用sql语句查询数据库啊,貌似这种东西用数据库最好实现,特别是数据库大的情况下
还是江筱吧 2011-03-13
  • 打赏
  • 举报
回复
哈哈 我最近用的就是这种id读卡器。 这类读卡器一般都有参数可调的,就是几个开关,你可以设置读到数据后追加一个回车进去,这样你就能 判断回车事件了,这样是最保险的,而且像这种被动刷卡的一般都是这么做的
ewindows98 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 runer 的回复:]

这种读卡器和一些条码扫描器差不多
以前做过2代身份证的一些应用,有的读卡器和你说的差不多

有两种思路

1.响应usb读卡器的“键盘”事件
2.采用你的方法。(可以在edit的onChange事件中比对,比对完成后清空)
另,这方法可能得要求你的edit有焦点
[/Quote]



多謝runer 的回复
你說的第1種方法, 我不知道“键盘”事件有哪几種,我試了keypress,keydown, 它們帶的參數key 都只是一個字符(當前輸的單個字符),我不知如何取刷卡的整個字符(有10個字符)
第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!

請教,有什么解決之道嗎!

謝謝!
last_wolf1860 2011-03-10
  • 打赏
  • 举报
回复
为什么要加Edit呢?这种设计本来就有问题,你把数取到了,直接比对,不比写到Edit强?就算要加显示的东西也要用列表Grid呀,一次写一行,不用的就清掉,自己不是更好控制吗?
奔雷手 2011-03-09
  • 打赏
  • 举报
回复
加个timer 1秒就读一次卡的序列号
runer 2011-03-09
  • 打赏
  • 举报
回复
这种读卡器和一些条码扫描器差不多
以前做过2代身份证的一些应用,有的读卡器和你说的差不多

有两种思路

1.响应usb读卡器的“键盘”事件
2.采用你的方法。(可以在edit的onChange事件中比对,比对完成后清空)
另,这方法可能得要求你的edit有焦点
奔雷手 2011-03-09
  • 打赏
  • 举报
回复
非接触式读卡器吧。
先读出IC卡的序列号 然后跟数据库中相比较。
德卡ULC读卡器接口说明文档 各种读卡器的一些问题: 1 卡片芯片朝上朝下问题 卡片在读卡器中芯片朝上或朝下的问题,是根据读卡器的型号的不同而有区别的:RD600、RD600U、RD600P、RD600W-T、RD600S-T、RD600S-U-T读卡器中的卡片芯片朝上; RD600W-B、RD600S-B、RD600S-U-B读卡器中的卡片芯片朝下。 2 自动测卡问题 RD600演示程序中的自动测卡功能仅供参考,不是判断卡型的唯一标准,因为在测卡时读的是特征字节,而卡的特征字节有可能因卡的生产商不同而有所不同,当测卡不准时,请手动选卡型号。 3 验证密码问题 接触式读卡器在验证密码时,如果在前一次核对密码正确后而没下电的情况下,无论输入任何密码它都认为是正确的,只有下电后才能判断密码的正确与否。 4 USB读卡器 在使用USB读卡器时,不能先接读卡器,而是应该先安装USB驱动,然后再接上USB读卡器,这时系统会自动找到设备的。 5 IC_InitType 此函数不是测卡函数,它没有测卡功能,它的作用是告诉读卡器将要操作的卡型号而已。 6 初始化串口错误 串口资源已经被占用,(包括初始化串口后非正常退出而未关闭串口,然后再去初始化串口); 计算机与读写器通讯的波特率与读写器默认波特率不一致;计算机与读写器通讯的串口与读写器默认串口不一致;设备连接不正确,接触不正常。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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