現在の位置: ホーム> 最新記事一覧> str_splitと組み合わせて、文字列のCRCチェックを実装します

str_splitと組み合わせて、文字列のCRCチェックを実装します

M66 2025-05-28

データ検証を処理する場合、CRC(環状冗長性検証)は一般的な検証方法です。通常、CRC検証は、送信中にデータが変更されたことを確認するために使用されます。この記事では、この機能を達成するために、単純なCRCチェックアルゴリズムと組み合わせてPHPのSTR_SPLIT関数を使用する方法について説明します。

CRC検証とは何ですか?

CRC検証は、データの整合性を検証するために使用されるアルゴリズムです。データに対して特定の数学操作を実行することにより、「通常、数字」(通常は数字)を生成します。受信者は、同じアルゴリズムを使用してチェックコードを再計算できます。計算された値が送信されたチェックコードと一致している場合、データにエラーがないことを意味します。

実際のアプリケーションでは、CRC検証は一般に、ファイル転送、ネットワークプロトコル、およびその他のシナリオで使用され、データ送信の整合性を確保します。

PHPのSTR_SPLIT関数と組み合わせて、CRC検証を実装します

PHPのSTR_SPLIT関数は、文字列を複数のサブストリングに分割できます。 CRCチェックを実行する場合、計算のために入力文字列を小さな部品に分割するために使用できます。簡単な実装です。

1。CRCチェック関数を定義します

ビット操作とSTR_SPLIT関数を使用して、データチェックを実装する単純なCRCチェック機能を定義できます。

 <?php
function crc_check($data) {
    $crc = 0xFFFF; // 初期化 CRC 価値
    $dataArray = str_split($data); // データ文字列を文字配列に分割します
    
    foreach ($dataArray as $char) {
        $byte = ord($char); // 文字を取得します ASCII 価値
        $crc ^= $byte; // 意思 CRC 現在のバイトを使用した排他的または動作します

        // 右 CRC 価値行為位移处理
        for ($i = 0; $i < 8; $i++) {
            if ($crc & 0x0001) {
                $crc >>= 1;
                $crc ^= 0xA001; // 最低位置がある場合1,行為 XOR 動作します
            } else {
                $crc >>= 1;
            }
        }
    }

    return strtoupper(dechex($crc)); // ヘキサデシマルに戻ります CRC 価値
}

// サンプルデータ
$data = "Hello, world!";
// 電話 CRC 検証関数
$crcResult = crc_check($data);
echo "CRC 検証結果: " . $crcResult;
?>

2。コードの説明

  • str_split($ data) :入力データ$データを単一の文字配列に分割します。

  • ord($ char) :文字のASCII値を返します。

  • ビット操作パーツ:CRCアルゴリズムのコア部分は、XOR操作と変位計算を通じて実装されます。このプロセスは、各バイトを処理し、一連のXORおよび変位操作を通じて最終CRCチェック値を生成します。

  • dex($ crc) :最終CRCチェック値を16進表現に変換します。

上記の手順を通じて、入力文字列のCRCチェックコードを取得できます。

3.ユースケースデモンストレーション

文字列「Hello、World!」でCRC検証を実行すると、コードはCRC検証コードを返します。戻り値がE8B7BE43であると仮定します。

 $crcResult = crc_check("Hello, world!");
echo "CRC 検証結果: " . $crcResult;

まとめ

PHPのSTR_SPLIT関数とCRC検証アルゴリズムを組み合わせることにより、文字列の整合性検証を単純に実装できます。 STR_SPLIT関数は、文字列を単一文字に分割するのに役立ち、CRC計算バイトバイトを実行できます。

この記事が、PHPを使用してCRC検証を実装する方法をよりよく理解できることを願っています。さらに質問がある場合は、お気軽にご質問ください!