crc - Calculate CRC16 X25 in php -


i need in calculating crc x25 variation, have java tool , online tool give correct conversion, haven't been able reproduce myself.

online tool

github online tool

string: 40402900033231334c323031373030313839360000000000009001ffffffff0000d656b759 input type: hex -> calc crc16

result: crc-16/x-25  0x6c49 <-- value im trying in php string above. 

my php code far

private static $crc16_table = array     (0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad,     0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3,     0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108,     0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,     0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64,     0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399,     0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3,     0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,     0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e,     0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50,     0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d,     0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,     0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1,     0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e,     0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44,     0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,     0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab,     0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5,     0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e,     0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,     0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862,     0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693,     0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9,     0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,     0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324,     0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a,     0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483,     0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,     0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef,     0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710,     0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a,     0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,     0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1,     0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df,     0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704,     0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,     0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68,     0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595,     0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf,     0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,     0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022,     0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c,     0x3de3, 0x2c6a, 0x1ef1, 0x0f78, );  public static function calculate($buffer) {     $length = strlen($buffer);      $crc = 0;     $i = 0;     while ($length--) {         $crc = (( $crc >> 8) & 0xff) ^ (self::$crc16_table[(ord($buffer[$i++]) ^ $crc) & 0xff]);     }      return (($crc & 0xffff) ^ 0x8000) - 0x8000; }  public static function computecrc($data) {     $crc = 0xffff;      foreach ($data $d) {         $crc = self::$crc16_table[($d ^ $crc) & 0xff] ^ ($crc >> 8 & 0xff);     }      $crc = $crc ^ 0xffff;     $crc = $crc & 0xffff;      return $crc; } 

this gives me results follows

computecrc(str_split("40402900033231334c323031373030313839360000000000009001ffffffff0000d656b759", 2)); result = ec71 <-- dechex result  calculate("40402900033231334c323031373030313839360000000000009001ffffffff0000d656b759"); result = 48d7; <-- dechex result 

any appreciated

solved applying hexdec before calculation, may useful in future.

public static function computecrc($data) {     $crc = 0xffff;      foreach ($data $d) {         $d = hexdec($d); <-- did trick         $crc = self::$crc16_table[($d ^ $crc) & 0xff] ^ ($crc >> 8 & 0xff);     }      $crc = $crc ^ 0xffff;     $crc = $crc & 0xffff;      return $crc; } 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -