123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- var isStr = require('./isStr');
- var strToBytes = require('./strToBytes');
- var TABLE = [
- 0x0000,
- 0xc0c1,
- 0xc181,
- 0x0140,
- 0xc301,
- 0x03c0,
- 0x0280,
- 0xc241,
- 0xc601,
- 0x06c0,
- 0x0780,
- 0xc741,
- 0x0500,
- 0xc5c1,
- 0xc481,
- 0x0440,
- 0xcc01,
- 0x0cc0,
- 0x0d80,
- 0xcd41,
- 0x0f00,
- 0xcfc1,
- 0xce81,
- 0x0e40,
- 0x0a00,
- 0xcac1,
- 0xcb81,
- 0x0b40,
- 0xc901,
- 0x09c0,
- 0x0880,
- 0xc841,
- 0xd801,
- 0x18c0,
- 0x1980,
- 0xd941,
- 0x1b00,
- 0xdbc1,
- 0xda81,
- 0x1a40,
- 0x1e00,
- 0xdec1,
- 0xdf81,
- 0x1f40,
- 0xdd01,
- 0x1dc0,
- 0x1c80,
- 0xdc41,
- 0x1400,
- 0xd4c1,
- 0xd581,
- 0x1540,
- 0xd701,
- 0x17c0,
- 0x1680,
- 0xd641,
- 0xd201,
- 0x12c0,
- 0x1380,
- 0xd341,
- 0x1100,
- 0xd1c1,
- 0xd081,
- 0x1040,
- 0xf001,
- 0x30c0,
- 0x3180,
- 0xf141,
- 0x3300,
- 0xf3c1,
- 0xf281,
- 0x3240,
- 0x3600,
- 0xf6c1,
- 0xf781,
- 0x3740,
- 0xf501,
- 0x35c0,
- 0x3480,
- 0xf441,
- 0x3c00,
- 0xfcc1,
- 0xfd81,
- 0x3d40,
- 0xff01,
- 0x3fc0,
- 0x3e80,
- 0xfe41,
- 0xfa01,
- 0x3ac0,
- 0x3b80,
- 0xfb41,
- 0x3900,
- 0xf9c1,
- 0xf881,
- 0x3840,
- 0x2800,
- 0xe8c1,
- 0xe981,
- 0x2940,
- 0xeb01,
- 0x2bc0,
- 0x2a80,
- 0xea41,
- 0xee01,
- 0x2ec0,
- 0x2f80,
- 0xef41,
- 0x2d00,
- 0xedc1,
- 0xec81,
- 0x2c40,
- 0xe401,
- 0x24c0,
- 0x2580,
- 0xe541,
- 0x2700,
- 0xe7c1,
- 0xe681,
- 0x2640,
- 0x2200,
- 0xe2c1,
- 0xe381,
- 0x2340,
- 0xe101,
- 0x21c0,
- 0x2080,
- 0xe041,
- 0xa001,
- 0x60c0,
- 0x6180,
- 0xa141,
- 0x6300,
- 0xa3c1,
- 0xa281,
- 0x6240,
- 0x6600,
- 0xa6c1,
- 0xa781,
- 0x6740,
- 0xa501,
- 0x65c0,
- 0x6480,
- 0xa441,
- 0x6c00,
- 0xacc1,
- 0xad81,
- 0x6d40,
- 0xaf01,
- 0x6fc0,
- 0x6e80,
- 0xae41,
- 0xaa01,
- 0x6ac0,
- 0x6b80,
- 0xab41,
- 0x6900,
- 0xa9c1,
- 0xa881,
- 0x6840,
- 0x7800,
- 0xb8c1,
- 0xb981,
- 0x7940,
- 0xbb01,
- 0x7bc0,
- 0x7a80,
- 0xba41,
- 0xbe01,
- 0x7ec0,
- 0x7f80,
- 0xbf41,
- 0x7d00,
- 0xbdc1,
- 0xbc81,
- 0x7c40,
- 0xb401,
- 0x74c0,
- 0x7580,
- 0xb541,
- 0x7700,
- 0xb7c1,
- 0xb681,
- 0x7640,
- 0x7200,
- 0xb2c1,
- 0xb381,
- 0x7340,
- 0xb101,
- 0x71c0,
- 0x7080,
- 0xb041,
- 0x5000,
- 0x90c1,
- 0x9181,
- 0x5140,
- 0x9301,
- 0x53c0,
- 0x5280,
- 0x9241,
- 0x9601,
- 0x56c0,
- 0x5780,
- 0x9741,
- 0x5500,
- 0x95c1,
- 0x9481,
- 0x5440,
- 0x9c01,
- 0x5cc0,
- 0x5d80,
- 0x9d41,
- 0x5f00,
- 0x9fc1,
- 0x9e81,
- 0x5e40,
- 0x5a00,
- 0x9ac1,
- 0x9b81,
- 0x5b40,
- 0x9901,
- 0x59c0,
- 0x5880,
- 0x9841,
- 0x8801,
- 0x48c0,
- 0x4980,
- 0x8941,
- 0x4b00,
- 0x8bc1,
- 0x8a81,
- 0x4a40,
- 0x4e00,
- 0x8ec1,
- 0x8f81,
- 0x4f40,
- 0x8d01,
- 0x4dc0,
- 0x4c80,
- 0x8c41,
- 0x4400,
- 0x84c1,
- 0x8581,
- 0x4540,
- 0x8701,
- 0x47c0,
- 0x4680,
- 0x8641,
- 0x8201,
- 0x42c0,
- 0x4380,
- 0x8341,
- 0x4100,
- 0x81c1,
- 0x8081,
- 0x4040
- ];
- if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
- exports = function(input, previous) {
- return exports.signed(input, previous) >>> 0;
- };
- exports.signed = function(input, previous) {
- if (isStr(input)) input = strToBytes(input);
- var crc = ~~previous;
- for (var i = 0, len = input.length; i < len; i++) {
- var byte = input[i];
- crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff;
- }
- return crc;
- };
- module.exports = exports;
|