* http://www.summitinstruments.com/library/tn410.htm * http://www.lammertbies.nl/comm/info/crc-calculation.html?crc=1234567898765421&method=ascii *** Polynom = 0x8005 #DEFINE CRC16 0xA001 * Build CRC table DIMENSION laCrc[256] FOR i=0 TO 255 lnData = i lnCrc = 0 FOR j=0 TO 7 IF BITAND(BITXOR(lnData, lnCrc),1) > 0 lnCrc = BITXOR(BITRSHIFT(lnCrc,1), CRC16) ELSE lnCrc = BITRSHIFT(lnCrc,1) ENDIF lnData = BITRSHIFT(lnData,1) ENDFOR *? i, TRANSFORM(lnCrc, "@0") laCrc[i+1] = lnCrc ENDFOR * Calculate CRC16 ***Str = "123456789" lcStr = "1234567898765421" lnCrc = 0 FOR i=1 TO LEN(lcStr) lnByte = ASC(SUBSTR(lcStr,i,1)) lnCrc = BITXOR( BITRSHIFT(lnCrc,8), ; laCrc[BITXOR(BITAND(lnCrc, 0xFF), lnByte)+1]) ENDFOR ? TRANSFORM(lnCrc, "@0")BTW, neither one of CRC16 algorithms is more "usual" than another.