Library for calculating CRC3/CRC4/CRC8/CRC16/CRC24/CRC32/CRC64
Project description
libscrc is a library for calculating CRC3 CRC4 CRC5 CRC6 CRC7 CRC8 CRC16 CRC24 CRC32 CRC64.
CRCx |
CRC8 |
CRC16 |
CRC24 |
CRC32 |
CRC64 |
---|---|---|---|---|---|
CRC3-GSM |
INTEL |
MODBUS |
BLE |
FSC |
GO-ISO |
CRC3-ROHC |
BCC |
IBM |
OPENPGP |
CRC32 |
ECMA182 |
CRC4-ITU |
LRC |
XMODEM |
LTE-A |
MPEG2 |
WE |
CRC5-ITU |
MAXIM8 |
CCITT |
LTE-B |
ADLER32 |
XZ64 |
CRC5-EPC |
ROHC |
KERMIT |
OS9 |
FLETCHER32 |
|
CRC5-USB |
ITU8 |
MCRF4XX |
FLEXRAY-A |
POSIX |
|
CRC6-ITU |
CRC8 |
SICK |
FLEXRAY-B |
BZIP2 |
|
CRC6-GSM |
SUM8 |
DNP |
INTERLAKEN |
JAMCRC |
|
CRC6-DARC |
FLETCHER8 |
X25 |
CRC24 |
AUTOSAR |
|
CRC7 |
SMBUS |
USB |
C / ISCSI |
||
CRC7-MMC |
AUTOSAR |
MAXIM16 |
D/BASE91-D |
||
CRC7-UMTS |
LTE |
DECT(R/X) |
Q / AIXM |
||
CRC7-ROHC |
SAE-J1850 |
TCP/UDP |
XFER |
||
I-CODE |
CDMA2000 |
CKSUM |
|||
CAN15 |
GSM-A |
FLETCHER16 |
XZ32 |
||
CAN17 |
NRSC-5 |
EPC16 |
AAL5 |
||
CAN21 |
WCDMA |
PROFIBUS |
ISO-HDLC |
||
BLUETOOTH |
BUYPASS |
PKZIP |
|||
CRC10-ATM |
DVB-S2 |
GENIBUS |
ADCCP |
||
CRC13-BBC |
EBU |
GSM16 |
V-42 |
||
MPT1327 |
DARC |
RIELLO |
|||
CDMA2000 |
MIFARE |
OPENSAFETY |
CRC30-CDMA |
||
EN13757 |
PHILIPS |
||||
CMS |
DARC82 |
Installation
Compile and install the library:
pip3 install libscrc
or:
python3 setup.py build python3 setup.py install
You will need the administrative privileges to execute the last command.
Cross compile and install the library:
# vim setup.cfg universal=1 plat-name=linux_armv7l export CROSS_COMPILE=arm-linux-gnueabihf- export CC='${CROSS_COMPILE}gcc -pthread' export LDSHARED='${CROSS_COMPILE}gcc -shared' export CFLAGS='-I/usr/include/python3.5m -I/usr/include/' python3 setup.py build # gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11)
After installation you can run unit tests to make sure that the library works fine. Execute:
# python3 -m libscrc.test.modbus # python3 -m libscrc.test.crc8 # python3 -m libscrc.test.crc16 # python3 -m libscrc.test.crc24 # python3 -m libscrc.test.crc32 # python3 -m libscrc.test.crc64
Usage
In Python 3:
import libscrc crc16 = libscrc.modbus(b'1234') # Calculate ASCII of modbus crc16 = libscrc.modbus(b'\x01\x02') # Calculate HEX of modbus crc16 = libscrc.modbus(bytearray( [ 0x01, 0x02 ] ))
Example
CRCx:
crc3 = libscrc.gsm3(b'1234') crc3 = libscrc.rohc3(b'1234') crc4 = libscrc.itu4(b'1234') crc4 = libscrc.g_704(b'1234') crc4 = libscrc.interlaken4(b'1234') crc5 = libscrc.itu5(b'1234') crc5 = libscrc.epc(b'1234') crc5 = libscrc.usb5(b'1234') crc6 = libscrc.itu6(b'1234') crc6 = libscrc.darc6(b'1234') crc7 = libscrc.mmc(b'1234') crc7 = libscrc.crc7(b'1234') crc7 = libscrc.umts7(b'1234') crc7 = libscrc.rohc7(b'1234') crc10 = libscrc.atm10(b'1234') crc10 = libscrc.gsm10(b'1234') crc10 = libscrc.crc10_cdma2000(b'1234') crc11 = libscrc.umts11(b'1234') crc11 = libscrc.flexray11(b'1234') crc12 = libscrc.umts12(b'1234') crc12 = libscrc.crc12_3gpp(b'1234') crc12 = libscrc.dect12(b'1234') crc12 = libscrc.crc12(b'1234') crc12 = libscrc.gsm12(b'1234') crc12 = libscrc.crc12_cdma2000(b'1234') crc13 = libscrc.bbc13(b'1234') crc14 = libscrc.darc14(b'1234') crc15 = libscrc.mpt1327(b'1234') crc15 = libscrc.can15(b'1234') crc17 = libscrc.can17(b'1234') crc21 = libscrc.can21(b'1234') crc30 = libscrc.cdma(b'1234') crc31 = libscrc.philips(b'1234') crc40 = libscrc.gsm40(b'1234') crc82 = libscrc.darc82(b'1234')
CRC8:
crc8 = libscrc.intel(b'1234') crc8 = libscrc.bcc(b'1234') crc8 = libscrc.lrc(b'1234') crc8 = libscrc.maxim8(b'1234') crc8 = libscrc.rohc(b'1234') crc8 = libscrc.itu8(b'1234') crc8 = libscrc.crc8(b'1234') crc8 = libscrc.smbus(b'1234') crc8 = libscrc.autosar8(b'1234') crc8 = libscrc.lte8(b'1234') crc8 = libscrc.sae_j1850(b'1234') crc8 = libscrc.icode8(b'1234') crc8 = libscrc.gsm8_a(b'1234') crc8 = libscrc.nrsc_5(b'1234') crc8 = libscrc.wcdma8(b'1234') crc8 = libscrc.bluetooth(b'1234') crc8 = libscrc.dvb_s2(b'1234') crc8 = libscrc.ebu8(b'1234') crc8 = libscrc.darc8(b'1234') crc8 = libscrc.opensafety8(b'1234') crc8 = libscrc.i432_1(b'1234') crc8 = libscrc.mifare_mad(b'1234') crc8 = libscrc.tech_3250(b'1234') crc8 = libscrc.aes8(b'1234')
CRC16:
crc16 = libscrc.ibm(b'1234') # poly=0xA001 (default Reversed) crc16 = libscrc.ibm(b'1234', 0x8005) # poly=0x8005 (Normal) crc16 = libscrc.modbus(b'1234') crc16 = libscrc.xmodem(b'1234') crc16 = libscrc.zmodem(b'1234') crc16 = libscrc.ccitt(b'1234') crc16 = libscrc.ccitt_aug(b'1234') crc16 = libscrc.ccitt_true(b'1234') crc16 = libscrc.ccitt_false(b'1234') crc16 = libscrc.kermit(b'1234') crc16 = libscrc.mcrf4xx(b'1234') crc16 = libscrc.sick(b'1234') crc16 = libscrc.dnp(b'1234') crc16 = libscrc.x25(b'1234') crc16 = libscrc.usb16(b'1234') crc16 = libscrc.maxim16(b'1234') crc16 = libscrc.dect_r(b'1234') crc16 = libscrc.dect_x(b'1234') data = b'\x45\x00\x00\x3c\x00\x00\x00\x00\x40\x11\x00\x00\xc0\xa8\x2b\xc3\x08\x08\x08\x08\x11' crc16 = libscrc.tcp( data ) # 13933 crc16 = libscrc.udp( data ) # 13933 crc16 = libscrc.epc16(b'1234') # RFID EPC(CRC16-PC-EPC) crc16 = libscrc.profibus(b'1234') crc16 = libscrc.buypass(b'1234') crc16 = libscrc.genibus(b'1234') crc16 = libscrc.gsm16(b'1234') crc16 = libscrc.riello(b'1234') crc16 = libscrc.crc16_a(b'1234') crc16 = libscrc.cdma2000(b'1234') crc16 = libscrc.teledisk(b'1234') crc16 = libscrc.tms37157(b'1234') crc16 = libscrc.en13757(b'1234') crc16 = libscrc.t10_dif(b'1234') crc16 = libscrc.dds_110(b'1234') crc16 = libscrc.lj1200(b'1234') crc16 = libscrc.opensafety_a(b'1234') crc16 = libscrc.opensafety_b(b'1234') crc16 = libscrc.arc(b'1234') crc16 = libscrc.lha(b'1234') crc16 = libscrc.cms(b'1234') crc16 = libscrc.darc(b'1234') crc16 = libscrc.epc_c1g2(b'1234') crc16 = libscrc.icode16(b'1234') crc16 = libscrc.ibm_3740(b'1234') crc16 = libscrc.autosar16(b'1234') crc16 = libscrc.ibm_sdlc(b'1234') crc16 = libscrc.iso_hdlc16(b'1234') crc16 = libscrc.iec14443_3_b(b'1234') crc16 = libscrc.iec14443_3_a(b'1234') crc16 = libscrc.v41_lsb(b'1234') crc16 = libscrc.v41_msb(b'1234') crc16 = libscrc.spi_fujitsu(b'1234') crc16 = libscrc.umts(b'1234') crc16 = libscrc.verifone(b'1234') crc16 = libscrc.acorn(b'1234') crc16 = libscrc.lte16(b'1234') crc16 = libscrc.nrsc5(b'1234')
- CRC24::
crc24 = libscrc.ble(b’1234’) crc24 = libscrc.flexraya(b’1234’) crc24 = libscrc.flexrayb(b’1234’) crc24 = libscrc.openpgp(b’1234’) crc24 = libscrc.lte_a(b’1234’) crc24 = libscrc.lte_b(b’1234’) crc24 = libscrc.os9(b’1234’) crc24 = libscrc.interlaken(b’1234’) crc24 = libscrc.crc24(b’1234’)
CRC32:
crc32 = libscrc.fsc(b'1234') # Ethernet frame sequence (FSC) crc32 = libscrc.mpeg2(b'1234') # MPEG2 crc32 = libscrc.crc32(b'1234') # WinRAR, File crc32 = libscrc.posix(b'1234') crc32 = libscrc.bzip2(b'1234') crc32 = libscrc.jamcrc(b'1234') crc32 = libscrc.autosar(b'1234') crc32 = libscrc.crc32_c(b'1234') crc32 = libscrc.crc32_d(b'1234') crc32 = libscrc.crc32_q(b'1234') crc32 = libscrc.xfer(b'1234') crc32 = libscrc.aixm(b'1234') crc32 = libscrc.base91_d(b'1234') crc32 = libscrc.cksum(b'1234') crc32 = libscrc.base91_c(b'1234') crc32 = libscrc.iscsi(b'1234') crc32 = libscrc.iso_hdlc(b'1234') crc32 = libscrc.xz32(b'1234') crc32 = libscrc.pkzip(b'1234') crc32 = libscrc.adccp(b'1234') crc32 = libscrc.v_42(b'1234') crc32 = libscrc.aal5(b'1234')
CRC64:
crc64 = libscrc.iso(b'1234') crc64 = libscrc.ecma182(b'1234') crc64 = libscrc.we(b'1234') crc64 = libscrc.xz64(b'1234')
NOTICE
v0.1.6+ version will not support python2 series (2020-01-20)
Removed two steps compute function v1.3+
V1.0 (2020-03-23)
New hacker8 hacker16 hacker32 hacker64
New FLETCHER8 FLETCHER16 FLETCHER32
V0.1.5 (2017-09-22)
New CRC4-ITU Poly = 0x03 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC5-ITU Poly = 0x15 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC5-EPC Poly = 0x09 Initial = 0x09 Xorout=0x00 Refin=False Refout=False
New CRC5-USB Poly = 0x05 Initial = 0x1F Xorout=0x1F Refin=True Refout=True
New CRC6-ITU Poly = 0x03 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC7-MMC Poly = 0x09 Initial = 0x00 Xorout=0x00 Refin=False Refout=False
V0.1.4 (2017-09-21)
New CRC8-MAXIM8 Poly = 0x31 Initial = 0x00 Xorout=0x00 Refin=True Refout=True
New CRC8-ROHC Poly = 0x07 Initial = 0xFF Xorout=0x00 Refin=True Refout=True
New CRC8-ITU Poly = 0x07 Initial = 0x00 Xorout=0x55 Refin=False Refout=False
New CRC8-CRC8 Poly = 0x07 Initial = 0x00 Xorout=0x00 Refin=False Refout=False
V0.1.3 (2017-09-19)
New CRC16-X25
New CRC16-USB
New CRC16-MAXIM16
New CRC16-CCITT_FALSE
New CRC16-DECT
- Bugfixes
Calculate CRC16-IBM of poly = 0x8005 is ERROR.
V0.1.2 (2017-08-22)
- Platform Support
Win32
Linux_x86_64
MacOSX_10_6_intel
ARMv7 (Toradex Ixora iMX6 Linux-4.1.41)
- Bugfixes
Coding C99 standard.
Python/C API parsing arguments type error in linux.
V0.1.1 (2017-08-20)
New CRC16-DNP and CRC16-SICK
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for libscrc-1.3-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83b5ccffecdeff003e3219500da9319a1277c8eb485ff6f4d80f7f5f7c5cc9c6 |
|
MD5 | 07a85fb318e6299fe501639b7a04455a |
|
BLAKE2b-256 | 489c5d7fae77c124bbdfd73730603f55c5b8c60a96993dd51de4d8a648cb3e1c |
Hashes for libscrc-1.3-cp39-cp39-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c1ad1fa5adcda6526c54925e9ea59dbff35a41f0f508eca3ea9e4b3598a3805 |
|
MD5 | 388240ac6068570beec36e54bae27fd8 |
|
BLAKE2b-256 | 74daeef2755882121a57766ed87a8bc55968d2634df15b685b83ec4ec42fc177 |
Hashes for libscrc-1.3-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e67985c9387c5427a0e159a69c6d3b7f7d4d3fd4498eed736869376396fde622 |
|
MD5 | d363df42ecc90d6516622ccc363c4034 |
|
BLAKE2b-256 | 667d22d0d05ba81b522eac012b5000b9d934f05afd1c052a96ab3d84289b91e2 |
Hashes for libscrc-1.3-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6b64657235a70d4ca47a43fc74be0a97cc54b95e3554413006c6b4b64140470 |
|
MD5 | 8ddffc3b1b09291fba947ff2e0375655 |
|
BLAKE2b-256 | b91e0b4c752124c83ca8720fdda82ac1824ac09a81c9329ceb70bb833dabb78e |
Hashes for libscrc-1.3-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43e0b676df8266f0fedf413b9e85a4e118be2aa224ebb8ebc64ac1122ffe4b78 |
|
MD5 | b5d25a8917f03220f371b23f0d01c9b6 |
|
BLAKE2b-256 | 1c0c7aa5c1886e9ac00ed49077e75381b95757f8b79f955a81f2f1b9912b0d85 |
Hashes for libscrc-1.3-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95e19b38ef169cd381c6c95607ee3f408ace5dc5a499910c85c330b7a212a623 |
|
MD5 | 8e64d538d1f22aa1095a80db6e45b7ca |
|
BLAKE2b-256 | d43ca47ace4d69a8967bb210df7c5814d77ea7ddf68b2a60c37b4cd050d802bb |
Hashes for libscrc-1.3-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbdfd8e201355ea4c19d5f0f954e23ff5c2c32b0b047ee3127d259cb1813bb72 |
|
MD5 | a241de74181eea26f67d75ae4d50d11c |
|
BLAKE2b-256 | fc8f187c9a346a2bc3f579d05c9d3230498c82bf7afddaf62daa669f8c4dd608 |
Hashes for libscrc-1.3-cp37-cp37m-linux_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8829c6e3b7351c44e7710d5aaf50705fc7ace686077dcd482e669f6dbf90f42e |
|
MD5 | 0be7ca7c669e0e11bdbc28f6d0e1c1e9 |
|
BLAKE2b-256 | ac4f9f6551bc2b591d891566d34a82fc658ab7413f218f83bc369fe0453a3df9 |
Hashes for libscrc-1.3-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca1a0781f0993f9b01c17d2abc1dd1499b4f149394ddb65fe2f2eeed4a940340 |
|
MD5 | a4b238f0b6369166fc4bb33390718348 |
|
BLAKE2b-256 | 34f8c473a8c2876b6d9f3ea0819f8e3e3c3f93807d288b9384e7db72a443f3be |
Hashes for libscrc-1.3-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 146f61f4fb4c304a72cecf63102bcaa75cca674a9fc5d718bad2198e4fe9116c |
|
MD5 | 2588cda04cbaa40ba11bee1f9dc1a48f |
|
BLAKE2b-256 | 181cbb55db88b56f4533fd6b65548e917cce009d2651c23ce1f5c815bc2a7411 |
Hashes for libscrc-1.3-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d366c095cc00baa2f48a2d7fa9b56488c161a637a257e55db0600c63cca68630 |
|
MD5 | e5a9ed382e91c7f68194c38cae366501 |
|
BLAKE2b-256 | 4b9836168b95186c998437732b7f08d22d2ba3bd21269b1c578a976b5eaeb4f5 |
Hashes for libscrc-1.3-cp36-cp36m-macosx_10_6_intel.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d26dfe368b114d09d5a1a89d03999a2102c738284b1a00d8081a2f6450112a2 |
|
MD5 | 0b006b606a0fecc2e5617556e1c9bf95 |
|
BLAKE2b-256 | e76e9083df85fdd704c7ca78c54b738d2b6c9953c399a07aac06e2aa96d8c04d |
Hashes for libscrc-1.3-cp35-cp35m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc35d1559effb90edade3b2ce81ea1b68b81c9d15f8e6a914b2e1cb08539bc5b |
|
MD5 | 8eaee9ac21c72d4e7d779d832d56b435 |
|
BLAKE2b-256 | ae3cd9699e8f6b3912bddb26bce75f90f49a1d7144703a39e24a80b0a8d31706 |
Hashes for libscrc-1.3-cp35-cp35m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da6bb2c4f25ae1fac408cd428936e714803490bb6633ecabbea67972a064a97a |
|
MD5 | 37e9f0fd3065cce7dc848da2c824ce30 |
|
BLAKE2b-256 | 218c0fd57a22a6dd0c2a0be9dab7481181697930c6d79775e3bd72a849449ea7 |
Hashes for libscrc-1.3-cp35-cp35m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0ca413af70e45e71d39c88c92cd5fc09770af8ca037975248c74e6d69ddeccd |
|
MD5 | 3f68d6dde81e6b3a4f19c54fa30db8e1 |
|
BLAKE2b-256 | ba9e270a360b3fe4bd2072044c8ede51fcef1a976dac65b0366a3c366146b32b |
Hashes for libscrc-1.3-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 739fbab5684a37a774720cac961a9a472307626ac422661f8c8c6afd0c3cf067 |
|
MD5 | c9ad06a673ca7ea31e0f6517198409d4 |
|
BLAKE2b-256 | fd2b88c4d0362dae4143d8baecf6ab22a14ecbcc2aaf8fd08b115188c2688400 |
Hashes for libscrc-1.3-cp27-cp27mu-linux_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 311ebaa8ec6076b164c4774fd95dfbd26741f9c2329e547d012f5d7c73f1dca5 |
|
MD5 | 62a49ff7a7cf5c54191d32f7057a1cbb |
|
BLAKE2b-256 | e378a36d987e9389e66334b68f1fd2c5b24f1f8065d82c17d371c19251183a49 |
Hashes for libscrc-1.3-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 817f61839999417ca67885331dab2440605ee0cfe24f8e8bc3869128a28b6a14 |
|
MD5 | cbed337f72ed8d9ac39ac8ff675fa8b9 |
|
BLAKE2b-256 | 1224b204c9a1c02c2b8a42546030abaef307f0720e71b8ec4f29d2b74ebf9273 |