0.0.14 • Published 7 months ago

@taichunmin/crc v0.0.14

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

npm version jsdelivr hits Build status Coverage Status install size npm bundle size npm downloads GitHub contributors Known vulnerabilities MIT License

Features

  • Written in TypeScript and provides d.ts and d.mts files.
  • Supports ESM, CommonJS and iife format.
  • Pure JavaScript implementation, no dependencies.
  • Supported CRC algorithms:
    • crc8
      • crc8: CRC8, CRC8/SMBUS
      • crc8autosar: CRC8/8H2F, CRC8/AUTOSAR
      • crc8bluetooth: CRC8/BLUETOOTH
      • crc8cardx: CRC8/CARDX
      • crc8cdma2000: CRC8/CDMA2000
      • crc8darc: CRC8/DARC
      • crc8dvbs2: CRC8/DVB-S2
      • crc8ebu: CRC8/AES, CRC8/EBU, CRC8/TECH-3250
      • crc8gsma: CRC8/GSM-A
      • crc8gsmb: CRC8/GSM-B
      • crc8hitag: CRC8/HITAG
      • crc8icode: CRC8/I-CODE
      • crc8itu: CRC8/ITU, CRC8/I-432-1
      • crc8legic: CRC8/LEGIC
      • crc8mad: CRC8/MAD, CRC8/MIFARE-MAD
      • crc8maxim: CRC8/DOW-CRC, CRC8/MAXIM, CRC8/MAXIM-DOW
      • crc8nrsc5: CRC8/NRSC-5
      • crc8opensafety: CRC8/OPENSAFETY
      • crc8rohc: CRC8/ROHC
      • crc8saej1850: CRC8/SAE-J1850
      • crc8wcdma: CRC8/WCDMA, CRC8/LTE
    • crc16
      • crc16a: CRC16/A
      • crc16arc: CRC16, CRC16/ARC, CRC16/IBM, CRC16/LHA
      • crc16augccitt: CRC16/AUG-CCITT, CRC16/SPI-FUJITSU
      • crc16buypass: CRC16/BUYPASS, CRC16/UMTS, CRC16/VERIFONE
      • crc16ccittfalse: CRC16/AUTOSAR, CRC16/CCITT-FALSE, CRC16/IBM-3740
      • crc16cdma2000: CRC16/CDMA2000
      • crc16cms: CRC16/CMS
      • crc16dds110: CRC16/DDS-110
      • crc16dectr: CRC16/DECT-R, CRC16/R-CRC-16
      • crc16dectx: CRC16/DECT-X, CRC16/X-CRC-16
      • crc16dnp: CRC16/DNP
      • crc16en13757: CRC16/EN-13757
      • crc16genibus: CRC16/DARC, CRC16/EPC, CRC16/EPC-C1G2, CRC16/GENIBUS, CRC16/I-CODE
      • crc16gsm: CRC16/GSM
      • crc16iclass: CRC16/ICLASS
      • crc16kermit: CRC16/BLUETOOTH, CRC16/CCITT, CRC16/CCITT-TRUE, CRC16/CCITT-TRUE, CRC16/KERMIT, CRC16/V-41-LSB, CRC16/V-41-LSB
      • crc16lj1200: CRC16/LJ1200
      • crc16m17: CRC16/M17
      • crc16maxim: CRC16/MAXIM, CRC16/MAXIM-DOW
      • crc16mcrf4xx: CRC16/MCRF4XX
      • crc16modbus: CRC16/MODBUS
      • crc16nrsc5: CRC16/NRSC-5
      • crc16opensafetya: CRC16/OPENSAFETY-A
      • crc16opensafetyb: CRC16/OPENSAFETY-B
      • crc16philips: CRC16/PHILIPS
      • crc16profibus: CRC16/PROFIBUS
      • crc16riello: CRC16/RIELLO
      • crc16t10dif: CRC16/T10_DIF
      • crc16teledisk: CRC16/TELEDISK
      • crc16tms37157: CRC16/TMS37157
      • crc16usb: CRC16/USB
      • crc16x25: CRC16/B, CRC16/IBM-SDLC, CRC16/ISO-HDLC, CRC16/ISO-IEC-14443-3-B, CRC16/X-25
      • crc16xmodem: CRC16/ACORN, CRC16/LTE, CRC16/V-41-MSB, CRC16/XMODEM, CRC16/ZMODEM
    • crc32
      • crc32: CRC32, CRC32/ADCCP, CRC32/PKZIP, CRC32/V-42, CRC32/XZ
      • crc32autosar: CRC32/AUTOSAR
      • crc32bzip2: CRC32/AAL5, CRC32/BZIP2, CRC32/DECT-B
      • crc32c: CRC32/BASE91-C, CRC32/C, CRC32/CASTAGNOLI, CRC32/INTERLAKEN
      • crc32cdromedc: CRC32/CD-ROM-EDC
      • crc32d: CRC32/D, CRC32/BASE91-D
      • crc32jamcrc: CRC32/JAMCRC
      • crc32mef: CRC32/MEF
      • crc32mpeg2: CRC32/MPEG2
      • crc32posix: CRC32/CKSUM, CRC32/POSIX
      • crc32q: CRC32/AIXM, CRC32/Q
      • crc32sata: CRC32/SATA
      • crc32xfer: CRC32/XFER

Installation

Package manager

Using npm or yarn to install the package:

# npm
npm install @taichunmin/crc

# yarn
yarn add @taichunmin/crc

Once the package is installed, you can import the library using import or require:

// import
import crc8 from '@taichunmin/crc/crc8'
import crc16a from '@taichunmin/crc/crc16a'
import crc32 from '@taichunmin/crc/crc32'

// require
const crc8 = require('@taichunmin/crc/crc8')
const crc16a = require('@taichunmin/crc/crc16a')
const crc32 = require('@taichunmin/crc/crc32')

CDN

Using jsDelivr CDN:

<!-- script -->
<script src="https://cdn.jsdelivr.net/npm/@taichunmin/crc@0"></script>
<script>
  const { crc16a, crc32 } = window?.taichunmin?.crc
</script>

<!-- module -->
<script type="module">
  import crc8 from 'https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc8.mjs/+esm'
  import crc16a from 'https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc16a.mjs/+esm'
  import crc32 from 'https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc32.mjs/+esm'
</script>

<!-- module + async import (can be used in DevTools) -->
<script type="module">
  const { default: crc8 } = await import('https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc8.mjs/+esm')
  const { default: crc16a } = await import('https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc16a.mjs/+esm')
  const { default: crc32 } = await import('https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc32.mjs/+esm')
</script>

Usage

Node.js

Using specific CRC is the recommended way to reduce bundle size:

import crc32 from '@taichunmin/crc/crc32'
crc32(new Uint8Array([0x68, 0x65, 0x6C, 0x6C, 0x6F])).toString(16)
// "3610a686"

Using TextEncoder to encode UTF-8 string to Uint8Array:

import crc32 from '@taichunmin/crc/crc32'
crc32(new TextEncoder('utf-8').encode('hello')).toString(16)
// "3610a686"

Or using a Buffer:

import crc32 from '@taichunmin/crc/crc32'
crc32(Buffer.from('hello')).toString(16)
// "3610a686"
crc32(Buffer.from('68656C6C6F', 'hex')).toString(16)
// "3610a686"
crc32(fs.readFileSync('README.md', 'utf-8')).toString(16)

Incrementally calculate a CRC:

import crc32 from '@taichunmin/crc/crc32'

const utf8Encoder = new TextEncoder('utf-8')
let value = crc32()
for (const chunk of ['one', 'two', 'three']) value = crc32(utf8Encoder.encode(chunk), value)
value.toString(16)
// "9e1c092"

Browser

<!-- script -->
<script src="https://cdn.jsdelivr.net/npm/@taichunmin/crc@0"></script>
<script>
  const { crc32 } = window?.taichunmin?.crc
  crc32(new Uint8Array([0x68, 0x65, 0x6C, 0x6C, 0x6F])).toString(16)
  // "3610a686"
</script>

<!-- module -->
<script type="module">
  import crc32 from 'https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc32.mjs/+esm'
  crc32(new Uint8Array([0x68, 0x65, 0x6C, 0x6C, 0x6F])).toString(16)
  // "3610a686"
</script>

<!-- module + import (can be used in DevTools) -->
<script type="module">
  const { default: crc32 } = await import('https://cdn.jsdelivr.net/npm/@taichunmin/crc@0/dist/crc32.mjs/+esm')
  crc32(new Uint8Array([0x68, 0x65, 0x6C, 0x6C, 0x6F])).toString(16)
  // "3610a686"
</script>

References