or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

crc1.mdcrc16-algorithms.mdcrc24.mdcrc32-algorithms.mdcrc8-algorithms.mdindex.md
tile.json

crc24.mddocs/

CRC24 Algorithm

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

import crc24 from "crc/crc24";
import crc24Calculator from "crc/calculators/crc24";
const crc24 = require("crc/crc24");
const crc24Calculator = require("crc/calculators/crc24");

API

CRC24 Function

/**
 * 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";
}

CRC24 Calculator

/**
 * 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;

Usage

Basic CRC24 Calculation

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));

Incremental CRC24 Calculation

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));

File Integrity Verification

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");
}

Using the Raw Calculator

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));

Streaming Data Processing

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));

Signed vs Unsigned Results

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"

Multi-Input Type Support

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);

Performance Comparison

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");

Error Detection Capability

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);

Algorithm Details

CRC24 characteristics:

  • Polynomial: x^24 + x^23 + x^18 + x^17 + x^14 + x^11 + x^10 + x^7 + x^3 + x^2 + x + 1
  • Width: 24 bits
  • Output Range: 0 to 16,777,215 (unsigned) or -8,388,608 to 8,388,607 (signed)
  • Error Detection: Excellent for detecting burst errors up to 24 bits
  • Use Cases: Medium-sized data integrity verification, network protocols, file verification

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.