美文网首页
IC刷卡机不依赖input解决方式

IC刷卡机不依赖input解决方式

作者: 会飞的猪l | 来源:发表于2019-11-17 22:10 被阅读0次

最近给某汽车公司做管理系统,需要一个这样的需求,客户希望一刷刷卡机,就弹出报修系统,而不是必须在input里面的刷,很不方便。
读卡器就是市场是普通的IC读卡,厂家没有提供任何浏览器插件。
机器拿在手上发现,一刷卡发现浏览器在input状态下会直接输入,想到有可能是模拟键盘的操作。于是可以测试一下,直接绑定在document.onkeypress,可以发现触发的键盘事件以及enter事件,由于是机器操作,两次键盘事件触发的间隔极短。
这样的话我们可以直接利用键盘事件去做直接弹框,同时可以利用人和机器的时间差,去判断是人还是刷卡。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
    </head>
    <body class="hold-transition login-page">
        <!-- 输入框 -->
        <input type="text" name="" value="" autofocus>
    </body>
    <script>
        window.onload = function(e){
            code = ""; // 模拟输入的值
            var lastTime,nextTime;// 记录两次键盘的时间
            var lastCode,nextCode;// 两次键盘的键码值
            document.onkeypress = function(e) {// 监听键盘事件
                nextCode = e.which;// 当前的键码
                nextTime = new Date().getTime();// 当前的毫秒数
                console.log(nextCode,(nextTime - lastTime));
                if(nextCode >= 48 && nextCode <= 57){// 只关注数字键
                    if(lastCode != null && lastTime != null && nextTime - lastTime <= 30) {// 相差30以内说明是机器刷卡
                       code += String.fromCharCode(lastCode);// 把键盘码返回为对应的值
                    } else {// 手动在输入
                       code = "";
                    }
                    // 当前的键盘码和时间作为下一次的上一次
                    lastCode = nextCode;
                    lastTime = nextTime;
                }
                if(nextCode == 13){//enter键代表刷卡结束
                    if(code && (nextTime - lastTime) <= 100){// 刷卡的卡号获取成功,且是机器触发的enter
                        code +=  String.fromCharCode(lastCode);
                        window.location.href="http://www.baidu.com";
                    }
                }
            }
        }
    </script>
</html>

本文章参考https://www.cnblogs.com/yangfei123/p/10123312.html

相关文章

  • IC刷卡机不依赖input解决方式

    最近给某汽车公司做管理系统,需要一个这样的需求,客户希望一刷刷卡机,就弹出报修系统,而不是必须在input里面的刷...

  • 2020-06-28

    IC卡食堂刷卡机取代了传统的现金消费方式,使用目前先进的MIFARE I型非接触式IC卡消费方式。非接触式IC卡具...

  • 2020-05-21

    IC卡食堂刷卡机取代了传统的现金消费方式,使用目前先进的MIFARE I型非接触式IC卡消费方式。非接触式IC卡具...

  • 2020-05-13

    IC卡食堂刷卡机取代了传统的现金消费方式,使用目前先进的MIFARE I型非接触式IC卡消费方式。非接触式IC卡具...

  • 2020-07-14

    目前市面上,食堂人卡分离的IC卡身份验证方式,无法解决代刷问题。许多职工家属、好友用职工的IC卡到食堂进行消费,违...

  • android studio 3.0的打包在混淆时报错The s

    The same input jar xxx.jar is specified twice 出现的报错信息 我的解决方式

  • 苹果微信浏览器 button input 发白

    解决方案: input[type=button], input[type=submit], input[type=...

  • input 框背景黄色解决方式

    在goole浏览器下面 input框有记录的情况下背景的样式会成为淡黄色;选中已被记录的文字文字为黑色; 背景解决...

  • elementUI中input框无法输入与禁止输入空格

    input框无法输入的解决办法 vue

  • codeigniter后台input->post()无法去axi

    用axios的json方式做post时,ci用$this->input->post('tel')无法取值 解决办法...

网友评论

      本文标题:IC刷卡机不依赖input解决方式

      本文链接:https://www.haomeiwen.com/subject/egkmictx.html