12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- var poly = 0xEDB88320; // reverse polynomial
- // build table
- function signed_crc_table() {
- var c, n, k, table = new Array(256);
- for (n = 0; n < 256; n++) {
- c = n;
- for (k = 0; k < 8; k++) {
- if (c & 1) {
- c = poly ^ (c >>> 1);
- }
- else {
- c = c >>> 1;
- }
- }
- table[n] = c >>> 0;
- }
- return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;
- }
- var T = signed_crc_table();
- function crc32_str(str, seed = 0) {
- var C = seed ^ -1;
- for (var i = 0, L = str.length, c, d; i < L;) {
- c = str.charCodeAt(i++);
- if (c < 0x80) {
- C = (C >>> 8) ^ T[(C ^ c) & 0xFF];
- }
- else if (c < 0x800) {
- C = (C >>> 8) ^ T[(C ^ (192 | ((c >> 6) & 31))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
- }
- else if (c >= 0xD800 && c < 0xE000) {
- c = (c & 1023) + 64;
- d = str.charCodeAt(i++) & 1023;
- C = (C >>> 8) ^ T[(C ^ (240 | ((c >> 8) & 7))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 2) & 63))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | ((d >> 6) & 15) | ((c & 3) << 4))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | (d & 63))) & 0xFF];
- }
- else {
- C = (C >>> 8) ^ T[(C ^ (224 | ((c >> 12) & 15))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 6) & 63))) & 0xFF];
- C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF];
- }
- }
- return C ^ -1;
- }
- function decimalToHex(num) {
- var str = (num >>> 0).toString(16);
- var padLen = 8 - str.length;
- return padLen > 0 ? new Array(padLen + 1).join('0') + str : str;
- }
- function crc32(str) {
- return decimalToHex(crc32_str(str));
- }
- export default crc32;
|