crc16 modbus in Python

อัลกอริธึมการแฮชของ Cyclic Redundance Check ที่ใช้ใน python

def crc16(data: str, poly: hex = 0xA001) -> str:
	    '''
	        CRC-16 MODBUS HASHING ALGORITHM
	    '''
	    crc = 0xFFFF
	    for byte in data:
	        crc ^= ord(byte)
	        for _ in range(8):
	            crc = ((crc >> 1) ^ poly
	                   if (crc & 0x0001)
	                   else crc >> 1)
	

	    hv = hex(crc).upper()[2:]
	    blueprint = '0000'
	    return (blueprint if len(hv) == 0 else blueprint[:-len(hv)] + hv)

Usage

>> from crc import crc16
>> example_str = 'Cyclic redundat check 16 modbus alogirthm in python'
>> crc16(example_str)
'396E'


0
173