해시(Hash) 명령


crc 명령

crc 명령은 8/16/32비트 CRC를 계산하는 시스템 명령이며 형식은 다음과 같습니다.

이 명령의 반환값은 계산된 CRC 값 입니다.

인수 설명
bits 8 - 8bit CRC 계산
16 - 16bit CRC 계산
32 - 32bit CRC 계산
$msg CRC를 계산할 원본 데이터
init CRC 초기값
이 항목을 생략하면 기본값을 8비트-ff, 16비트-1d0f, 32비트-ffffffff 입니다.
div CRC계산할 때 사용되는 divisor(polynomial)입니다.
이 항목을 생략하면 기본값은 8비트: e0 16비트: 1021 32비트: edb88320 입니다.
msb/lsb CRC 계산 순서입니다. msb는 byte 데이터의 상위->하위 비트 순서로 계산되고, lsb는 하위->상위 비트 순서로 계산됩니다.
생략시 기본값: 8비트 - lsb, 16비트 - msb, 32비트 - lsb

다음은 각 CRC종류마다 CRC를 계산하는 예제코드입니다.

<?php

$string = "123456789";

printf("CRC-16-ANSI : %04x\r\n", (int)system("crc 16 %1 0000 a001 lsb", $string));

printf("CRC-16-Modbus : %04x\r\n", (int)system("crc 16 %1 ffff a001 lsb", $string));

printf("CRC-CCITT FFFF: %04x\r\n", (int)system("crc 16 %1 ffff 1021 msb", $string));

printf("CRC-CCITT 1D0F: %04x\r\n", (int)system("crc 16 %1 1d0f 1021 msb", $string));

printf("CRC-CCITT XModem : %04x\r\n", (int)system("crc 16 %1 0000 1021 msb", $string));

$crc16_out = (int)system("crc 16 123456789 %1 8408 lsb", $string);
$crc16_out = bin2int(int2bin($crc16_out, 2, true), 0, 2);
printf("CRC-CCITT Kermit : %04x\r\n", $crc16_out);

$crc16_out = (int)system("crc 16 123456789 ffff 8408 lsb");
$crc16_out = $crc16_out ^ 0xffff;
printf("CRC-CCITT PPP    : %04x\r\n", $crc16_out);

$crc16_out = ~(int)system("crc 16 %1 0000 a6bc lsb", $string);
$crc16_out = bin2int(int2bin($crc16_out, 2, true), 0, 2);
printf("CRC-16-DNP       : %04x\r\n", $crc16_out);

?>