以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- crc16验证2 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108026) |
-- 作者:fubblyc -- 发布时间:2017/10/14 15:22:00 -- crc16验证2 老师, 条码:6901849257652 380eee13363930313834393235373635320a CRC16func(str) :EE13 ret.characteristic.value.substring(4, 8)).toUpperCase() :EE13 这样可以相等! 但下面的这个就不行 条码:6932394905163 380e0944363933323339343930353136330a CRC16func(str) :944 ret.characteristic.value.substring(4, 8)).toUpperCase() :0944 他自动把 0 给去掉了,那怎么处理呢? 甜老师给的代码如下: function CRC16func(AllDATA) { var cnCRC_CCITT = 0x1021; var i = -1, j = -1; var nData = -1, nAccum = -1, nYAccum = -1; var Table_CRC = []; var aSize = AllDATA.length; for (i = 0; i < 256; i++) { nData = C16func.call(this, i, 8); nAccum = 0; for (j = 0; j < 8; j++) { if ((nData ^ nAccum) & 0x8000) { nAccum = C16func.call(this, nAccum, 1); nAccum = nAccum ^ cnCRC_CCITT; } else { nAccum = C16func.call(this, nAccum, 1); nAccum = nAccum; } nData = C16func.call(this, nData, 1); } Table_CRC[i] = nAccum; } nAccum = 0; for (i = 0; i < aSize; i++) { nYAccum = nAccum; nAccum = C16func.call(this, nAccum, 8); nAccum = nAccum ^ Table_CRC[(nYAccum >>> 8) ^ (AllDATA.charCodeAt(i))]; } return nAccum.toString(16).toUpperCase(); } function C16func(cData, cLen) { if (((cData << cLen).toString(2).length > 16) && (cData.toString(2).length <= 16)) { cData = (cData << cLen).toString(2).substr((cData << cLen).toString(2).length - 16, 16); cData = parseInt(cData, 2); } else { cData = cData << cLen; } return cData; } [此贴子已经被作者于2017/10/15 22:47:59编辑过]
|
-- 作者:fubblyc -- 发布时间:2017/10/15 22:48:00 -- 甜老师,麻烦你再帮忙看下。。。 |
-- 作者:有点甜 -- 发布时间:2017/10/15 23:08:00 -- return nAccum.toString(16).toUpperCase();
改成
var num = nAccum.toString(16).toUpperCase(); return (\'0000\'+num).slice(-4) [此贴子已经被作者于2017/10/15 23:07:52编辑过]
|
-- 作者:fubblyc -- 发布时间:2017/10/16 14:02:00 -- 甜老师厉害了!!高手!! |