var kb_status = '1'; var kb_readStr = ''; var kb_isstart = false; var kb_readfunc = ''; function start_read(func) { kb_isstart = true; kb_readfunc = func; kb_status = '1'; kb_readStr = ''; } function stop_read() { kb_isstart = false; kb_readfunc = ''; } function fromKeyCode(code) { if((code >= 48 && code <= 57) || (code >= 65 && code <= 90)) return String.fromCharCode(code); var keys = {186: ';', 188: ',', 189: '-', 190: '.', 191: '/', 222: "'", 219: '[', 221: ']', 187: '=', 96:'Num 0', 97:'Num 1', 98:'Num 2', 99:'Num 3', 100:'Num 4', 101:'Num 5', 102:'Num 6', 103:'Num 7', 104:'Num 8', 105:'Num 9', 111:'Num /', 106:'Num *', 109:'Num -', 111:'Num /', 107:'Num +',13:'[enter]',8:'[back]',110:'Num .' }; if(keys[code]) return keys[code]; return '*err*'; } function hashCode(strKey) { var hash = 0; if(strKey != null && strKey != "") { for (var i = 0; i < strKey.length; i++) { hash = hash * 31 + strKey.charCodeAt(i); hash = intValue(hash); } } return hash; } function intValue(num) { var MAX_VALUE = 0x7fffffff; var MIN_VALUE = -0x80000000; if(num > MAX_VALUE || num < MIN_VALUE) { return num &= 0xFFFFFFFF; } return num; } document.onkeydown = function() { if(!kb_isstart) return ; var code = event.keyCode; //[st]sduf87fjsdfysd78,526976123; if(code == 16) return ; kb_dealKey(fromKeyCode(code)); } function kb_dealKey(c) { if(kb_status == '1') { //开始 if(c == '[') { kb_status = '2'; } else if(c == ';') { //IC卡 kb_status = '6'; } else kb_readErr( 2); } else if(kb_status == '2') { //读取s if(c == 'S') kb_status = '3'; else { kb_status = '1'; kb_readErr(3); } } else if(kb_status == '3') { //读取t if(c == 'T') kb_status = '4'; else { kb_status = '1'; kb_readErr(4); } } else if(kb_status == '4') { //读取] if(c == ']') { kb_status = '5'; kb_readStr = ''; } else { kb_status = '1'; kb_readErr(5); } } else if(kb_status == '5') { //读取内容 if(c == ';') { kb_status = '1'; var a = kb_readStr.split(","); if(a.length == 2) { var s1 = a[0].toLowerCase(); var hcode = a[1]; if(hashCode(s1) == hcode) { kb_readContent(s1, 'qr'); } else { //alert(s1+","+hcode+","+hashCode(s1)); kb_readErr(6); } } else { kb_readErr(7); } kb_readStr = ''; } else { if(c == '*err*') { kb_status = '1'; kb_readErr(8); } else { kb_readStr += c; } } } else if(kb_status == '6') { //IC卡读取内容 if(c == '/') { kb_status = '1'; var s1 = kb_readStr.toLowerCase(); kb_readContent(s1, 'ic'); kb_readStr = ''; } else { if(c >= '0' && c <= '9') { kb_readStr += c; } else { kb_status = '1'; kb_readErr(8, 'ic'); } } } //$("div1").innerHTML += kb_status+"
"; } function kb_readErr(rs, type) { kb_status = '1'; kb_readStr = ''; //alert(from+":读取错误!"+rs); var tname = '二维码'; if(type && type == 'ic') { tname = 'IC卡'; } } function kb_readContent(str, type) { if(!kb_isstart) return ; try{kb_readfunc(type, str);} catch(e){} }