65.9K
CodeProject 正在变化。 阅读更多。
Home

仅接受磁条卡读卡器数据输入的 JavaScript 解决方案。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (6投票s)

2015年6月28日

CPOL

2分钟阅读

viewsIcon

29949

允许用户通过磁条卡读卡器刷卡来填充文本框,并阻止用户使用键盘手动输入字段。

引言

磁条卡读卡器,也称为刷卡机、磁条读卡器或刷卡机,是一种硬件设备,用于读取塑料卡背面磁条中编码的信息。
也可以简单地说,它是一种通过与带有磁条的卡片接触来读取信息的数据采集设备。必须将卡片(刷卡)通过插槽才能读取存储的信息。

磁条卡读卡器允许用户刷卡,以便将卡片上的详细信息获取到任何获得焦点的文本编辑器,例如记事本、Word 文档或文本框。


磁条卡通常用于信用卡、身份证和交通票。它们也可能包含微芯片,主要用于商业场所的访问控制或电子支付。

问题

我有一个网页,允许用户插入 USB 磁卡读卡器,刷卡并填写屏幕上的所需信息。
在我的情况下,我需要允许用户仅使用磁条卡来填充文本框,并且我希望阻止用户使用键盘手动输入字段。

大多数磁条卡读卡器通过 USB 端口连接,并使用键盘接口;因为它不需要机器上的任何驱动程序软件,并且与计算机上运行的所有软件兼容。因此,如果您禁用键盘,您也会禁用磁条卡读卡器。

解决方案

我在互联网上找到一个建议,通过在磁条卡轨道上设置适当的前缀/后缀代码来处理这种情况,这样当刷卡时,您可以读取和检测信息,但不幸的是,如果用户输入前缀/后缀,这将不起作用。
为了解决这个问题,我依赖于填充字段所需的时长。从输入第一个字符开始到最后一个字符结束的时间差。

    //to make sure the entry happened from swipe card we check the time for populating text
   if (document.getElementById('txtCardReader').value.length == 1) {
       startdatetime = new Date();
   }
   // 8 is the last digit in my case
   else if (document.getElementById('txtCardReader').value.length == 8) {
       enddatetime = new Date();
       var difference_ms = enddatetime - startdatetime;

填充字段的时间不应超过 100 毫秒。如果超过,则表示是手动输入,文本框将被设置为空。通过这种方式,可以防止任何手动输入。

if (difference_ms > 100) {
   clear_text();
   return false;
}

关注点

如果您想应用这样的解决方案,您需要考虑磁卡上的磁数据有时会被刮擦而无法读取,或者读卡机停止工作。因此,您需要在这种情况下提供覆盖选项,例如要求提供卡持有人的其他信息,例如手机号码。

参考文献

历史

  • 2015年6月18日:版本 1.0。
© . All rights reserved.