网上有的代码会计算出正数,有的不反对中文,这里整合了一下代码。
验证网站: https://www.lammertbies.nl/co...
function CRC32(str, radix = 10) { const Utf8Encode = function(string) { string = string.replace(/\r\n/g, "\n"); let text = ""; for (let n = 0; n < string.length; n++) { const c = string.charCodeAt(n); if (c < 128) { text += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { text += String.fromCharCode((c >> 6) | 192); text += String.fromCharCode((c & 63) | 128); } else { text += String.fromCharCode((c >> 12) | 224); text += String.fromCharCode(((c >> 6) & 63) | 128); text += String.fromCharCode((c & 63) | 128); } } return text; } const makeCRCTable = function(){ let c; const crcTable = []; for(let n =0; n < 256; n++){ c = n; for(let k =0; k < 8; k++){ c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); } crcTable[n] = c; } return crcTable; } const crcTable = makeCRCTable(); const strUTF8 = Utf8Encode(str); let crc = 0 ^ (-1); for (let i = 0; i < strUTF8.length; i++ ) { crc = (crc >>> 8) ^ crcTable[(crc ^ strUTF8.charCodeAt(i)) & 0xFF]; } crc = (crc ^ (-1)) >>> 0; return crc.toString(radix);};