Supports Hamming, Parity, Adler, Fletcher, Internet Checksum, LRC, XOR, additive checksums, and 200+ standard CRC (Cyclic Redundancy Check) algorithms in Java, covering bit widths from CRC-3 to CRC-82. Suitable for industrial communication, embedded development, file transmission, and other scenarios.
Feel free to Star, Fork, or submit Issues to contribute and improve the project!
Online CRC calculator: https://crc.wcj.plus/
- maven
<dependency>
<groupId>plus.wcj.crc</groupId>
<artifactId>crc</artifactId>
<version>RELEASE</version>
</dependency>import plus.wcj.crc.ChecksumModels;
import plus.wcj.crc.Checksums;
import plus.wcj.crc.CRCUtils;
import plus.wcj.crc.model.SumModel;
public class Example {
public static void main(String[] args) {
String input = "123456789";
System.out.println(Checksums.hex(ChecksumModels.CRC_16_MODBUS, input)); // 4B37
System.out.println(Checksums.hex(ChecksumModels.CRC_16_MODBUS, CRCUtils.hexToBytes("313233343536373839"))); // 4B37
System.out.println(Checksums.hex(Checksums.find("crc-32"), input)); // CBF43926
System.out.println(Checksums.hex(Checksums.findOrDefault("unknown"), input)); // empty
byte[] encoded = Checksums.array(ChecksumModels.HAMMING_8_4, input);
System.out.println(new String(Checksums.restore(ChecksumModels.HAMMING_8_4, encoded))); // 123456789
for (ChecksumModels model : ChecksumModels.values()) {
System.out.println(model.names()[0] + ": " + Checksums.hex(model, input));
}
Checksums.register(SumModel.create(8, 0x00, "DD", "MY-SUM-8"));
System.out.println(Checksums.hex(Checksums.find("my-sum-8"), input)); // DD
}
}Checksums.findOrDefault(name) returns ChecksumModels.NONE when the requested model does not exist. The original Checksums.find(name) method continues to return null.
Custom models can be registered with Checksums.register(model). All names returned by model.names() are added to the case-insensitive model registry.
- CRC 3
CRC-3/GSM, CRC-3/ROHC,
- CRC 4
CRC-4/G-704, CRC-4/ITU, CRC-4/INTERLAKEN,
- CRC 5
CRC-5/EPC-C1G2, CRC-5/EPC, CRC-5/G-704, CRC-5/ITU, CRC-5/USB,
- CRC 6
CRC-6/CDMA2000-A, CRC-6/CDMA2000-B, CRC-6/DARC, CRC-6/G-704, CRC-6/ITU, CRC-6/GSM,
- CRC 7
CRC-7/MMC, CRC-7, CRC-7/ROHC, CRC-7/UMTS,
- CRC 8
CRC-8/AUTOSAR, CRC-8/BLUETOOTH, CRC-8/CDMA2000, CRC-8/DARC, CRC-8/DVB-S2, CRC-8/GSM-A, CRC-8/GSM-B, CRC-8/HITAG, CRC-8/I-432-1, CRC-8/ITU, CRC-8/I-CODE, CRC-8/LTE, CRC-8/MAXIM-DOW, CRC-8/MAXIM, DOW-CRC, CRC-8/MIFARE-MAD, CRC-8/NRSC-5, CRC-8/OPENSAFETY, CRC-8/ROHC, CRC-8/SAE-J1850, CRC-8/SMBUS, CRC-8, CRC-8/TECH-3250, CRC-8/AES, CRC-8/EBU, CRC-8/WCDMA,
- CRC 10
CRC-10/ATM, CRC-10, CRC-10/I-610, CRC-10/CDMA2000, CRC-10/GSM,
- CRC 11
CRC-11/FLEXRAY, CRC-11, CRC-11/UMTS,
- CRC 12
CRC-12/CDMA2000, CRC-12/DECT, X-CRC-12, CRC-12/GSM, CRC-12/UMTS, CRC-12/3GPP,
- CRC 13
CRC-13/BBC,
- CRC 14
CRC-14/DARC, CRC-14/GSM,
- CRC 15
CRC-15/CAN, CRC-15, CRC-15/MPT1327,
- CRC 16
CRC-16/ARC, ARC, CRC-16, CRC-16/LHA, CRC-IBM, CRC-16/CDMA2000, CRC-16/CMS, CRC-16/DDS-110, CRC-16/DECT-R, R-CRC-16, CRC-16/DECT-X, X-CRC-16, CRC-16/DNP, CRC-16/EN-13757, CRC-16/GENIBUS, CRC-16/DARC, CRC-16/EPC, CRC-16/EPC-C1G2, CRC-16/I-CODE, CRC-16/GSM, CRC-16/IBM-3740, CRC-16/AUTOSAR, CRC-16/CCITT-FALSE, CRC-16/IBM-SDLC, CRC-16/ISO-HDLC, CRC-16/ISO-IEC-14443-3-B, CRC-16/X-25, CRC-B, X-25, CRC-16/ISO-IEC-14443-3-A, CRC-A, CRC-16/KERMIT, CRC-16/BLUETOOTH, CRC-16/CCITT, CRC-16/CCITT-TRUE, CRC-16/V-41-LSB, CRC-CCITT, KERMIT, CRC-16/LJ1200, CRC-16/M17, CRC-16/MAXIM-DOW, CRC-16/MAXIM, CRC-16/MCRF4XX, CRC-16/MODBUS, MODBUS, CRC-16/NRSC-5, CRC-16/OPENSAFETY-A, CRC-16/OPENSAFETY-B, CRC-16/PROFIBUS, CRC-16/IEC-61158-2, CRC-16/RIELLO, CRC-16/SPI-FUJITSU, CRC-16/AUG-CCITT, CRC-16/T10-DIF, CRC-16/TELEDISK, CRC-16/TMS37157, CRC-16/UMTS, CRC-16/BUYPASS, CRC-16/VERIFONE, CRC-16/USB, CRC-16/XMODEM, CRC-16/ACORN, CRC-16/LTE, CRC-16/V-41-MSB, XMODEM, ZMODEM,
- CRC 17
CRC-17/CAN-FD,
- CRC 21
CRC-21/CAN-FD,
- CRC 24
CRC-24/BLE, CRC-24/FLEXRAY-A, CRC-24/FLEXRAY-B, CRC-24/INTERLAKEN, CRC-24/LTE-A, CRC-24/LTE-B, CRC-24/OPENPGP, CRC-24, CRC-24/OS-9,
- CRC 30
CRC-30/CDMA,
- CRC 31
CRC-31/PHILIPS,
- CRC 32
CRC-32/AIXM, CRC-32Q, CRC-32/AUTOSAR, CRC-32/BASE91-D, CRC-32D, CRC-32/BZIP2, CRC-32/AAL5, CRC-32/DECT-B, B-CRC-32, CRC-32/CD-ROM-EDC, CRC-32/CKSUM, CKSUM, CRC-32/POSIX, CRC-32/ISCSI, CRC-32/BASE91-C, CRC-32/CASTAGNOLI, CRC-32/INTERLAKEN, CRC-32C, CRC-32/NVME, CRC-32/ISO-HDLC, CRC-32, CRC-32/ADCCP, CRC-32/V-42, CRC-32/XZ, PKZIP, CRC-32/JAMCRC, JAMCRC, CRC-32/MEF, CRC-32/MPEG-2, CRC-32/XFER, XFER,
- CRC 40
CRC-40/GSM,
- CRC 64
CRC-64/ECMA-182, CRC-64, CRC-64/GO-ISO, CRC-64/MS, CRC-64/NVME, CRC-64/REDIS, CRC-64/WE, CRC-64/XZ, CRC-64/GO-ECMA,
- CRC 82
CRC-82/DARC,
- XOR
XOR-8, XOR, BCC, XOR-16, XOR-32,
- Checksum
Checksum-8, SUM-8, Checksum-16, SUM-16, Checksum-32, SUM-32,
- LRC
LRC-8, LRC,
- Internet Checksum
Internet Checksum-16, Internet Checksum, IP Checksum,
- Fletcher
Fletcher-16, Fletcher-32,
- Adler
Adler-32, Adler32,
- Parity
Parity-Even, Even Parity, Parity-Odd, Odd Parity,
- Hamming
Hamming-7-4, Hamming (7,4), Hamming-8-4, Hamming (8,4),
Hamming models encode each input byte as two 4-bit nibbles. Checksums.restore(...) can restore Hamming encoded data and correct single-bit errors.
For Hamming models, bigEndian=true stores each code word in MSB-first order, and bigEndian=false stores it in LSB-first order.