CRC24 is a 24-bit CRC algorithm that provides strong error detection capabilities for medium-sized data blocks. It offers a good balance between computational efficiency and error detection strength.
import crc24 from "crc/crc24";
import crc24Calculator from "crc/calculators/crc24";const crc24 = require("crc/crc24");
const crc24Calculator = require("crc/calculators/crc24");/**
* Calculate CRC24 checksum
* @param value - Input data as string, ArrayBuffer, or Buffer
* @param previous - Previous CRC value for incremental calculation (optional)
* @returns CRC24 checksum as unsigned 24-bit number
*/
function crc24(value: BufferInput, previous?: number): number;
/**
* CRC24 function with additional properties
*/
interface CRC24Module extends CRCModule {
/** Returns signed CRC24 value */
signed: (value: BufferInput, previous?: number) => number;
/** Returns unsigned CRC24 value (same as main function) */
unsigned: (value: BufferInput, previous?: number) => number;
/** CRC model identifier: "crc-24" */
model: "crc-24";
}/**
* Raw CRC24 calculator function for Uint8Array input
* @param current - Input data as Uint8Array
* @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
* @returns CRC24 checksum as number
*/
function crc24Calculator(current: Uint8Array, previous?: number): number;import crc24 from "crc/crc24";
// Calculate CRC24 of a string
const result = crc24("hello world");
console.log(result.toString(16)); // 24-bit CRC value in hex
// Calculate CRC24 of a buffer
const buffer = Buffer.from("test data", "utf8");
const bufferCrc = crc24(buffer);
console.log("Buffer CRC24:", bufferCrc.toString(16));import crc24 from "crc/crc24";
// Calculate CRC24 incrementally for large data
let crcValue = crc24("first chunk");
crcValue = crc24("second chunk", crcValue);
crcValue = crc24("third chunk", crcValue);
crcValue = crc24("final chunk", crcValue);
console.log("Final CRC24:", crcValue.toString(16));import crc24 from "crc/crc24";
import fs from "fs";
// Calculate CRC24 of a file
const fileContent = fs.readFileSync("document.pdf");
const fileCrc = crc24(fileContent);
console.log("File CRC24:", fileCrc.toString(16));
// Store CRC24 for later verification
const storedCrc = fileCrc;
// Later, verify file integrity
const currentFileContent = fs.readFileSync("document.pdf");
const currentCrc = crc24(currentFileContent);
if (storedCrc === currentCrc) {
console.log("File integrity verified");
} else {
console.log("File has been modified or corrupted");
}import crc24Calculator from "crc/calculators/crc24";
// Convert string to Uint8Array for raw calculator
const encoder = new TextEncoder();
const data = encoder.encode("performance test data");
// Calculate using raw calculator
const result = crc24Calculator(data);
console.log("CRC24 result:", result.toString(16));import crc24 from "crc/crc24";
// Process streaming data with CRC24
class CRC24Stream {
private crcValue: number = 0;
update(chunk: string | Buffer): void {
this.crcValue = crc24(chunk, this.crcValue);
}
digest(): number {
return this.crcValue;
}
reset(): void {
this.crcValue = 0;
}
}
// Usage
const stream = new CRC24Stream();
stream.update("chunk 1");
stream.update("chunk 2");
stream.update("chunk 3");
const finalCrc = stream.digest();
console.log("Stream CRC24:", finalCrc.toString(16));import crc24 from "crc/crc24";
const data = "test data";
// Different result formats
const unsigned = crc24(data); // 0 to 16777215 range
const signed = crc24.signed(data); // -8388608 to 8388607 range
const alsoUnsigned = crc24.unsigned(data); // Same as main function
console.log("Unsigned:", unsigned);
console.log("Signed:", signed);
console.log("Hex format:", unsigned.toString(16));
console.log("Model:", crc24.model); // "crc-24"import crc24 from "crc/crc24";
// String input
const stringCrc = crc24("hello");
// Buffer input
const buffer = Buffer.from("hello", "utf8");
const bufferCrc = crc24(buffer);
// ArrayBuffer input
const arrayBuffer = new ArrayBuffer(5);
const view = new Uint8Array(arrayBuffer);
view.set([104, 101, 108, 108, 111]); // "hello"
const arrayBufferCrc = crc24(arrayBuffer);
console.log("String CRC24:", stringCrc.toString(16));
console.log("Buffer CRC24:", bufferCrc.toString(16));
console.log("ArrayBuffer CRC24:", arrayBufferCrc.toString(16));
// All should produce the same result
console.log("All equal:", stringCrc === bufferCrc && bufferCrc === arrayBufferCrc);import crc24 from "crc/crc24";
import crc24Calculator from "crc/calculators/crc24";
const testData = "This is a performance test with a longer string";
// Using the wrapped function
console.time("CRC24 wrapped");
for (let i = 0; i < 10000; i++) {
crc24(testData);
}
console.timeEnd("CRC24 wrapped");
// Using the raw calculator
const encoder = new TextEncoder();
const data = encoder.encode(testData);
console.time("CRC24 raw");
for (let i = 0; i < 10000; i++) {
crc24Calculator(data);
}
console.timeEnd("CRC24 raw");import crc24 from "crc/crc24";
// Demonstrate error detection
const originalData = "Important document content";
const originalCrc = crc24(originalData);
// Simulate single-bit error
const corruptedData = "Important document contant"; // 'e' changed to 'a'
const corruptedCrc = crc24(corruptedData);
console.log("Original CRC24:", originalCrc.toString(16));
console.log("Corrupted CRC24:", corruptedCrc.toString(16));
console.log("Error detected:", originalCrc !== corruptedCrc);CRC24 characteristics:
CRC24 provides stronger error detection than CRC16 while being more computationally efficient than CRC32, making it ideal for applications that need robust error detection for medium-sized data blocks.