簡易な誤り訂正符号
キャンペーンコードのようなもののために簡単なチェックの仕組みが作りたくて、思いつきで簡単な誤り訂正符号もどきを作ってみた。
で、あんまり考えてないけど、これって成り立っているのかすごく気になる。
<?php define('MIN_N', 1); define('MAX_N', 9999); function multiple($n) { $i = rand(MIN_N, (int)(MAX_N / $n)); return $i * $n; } function division($n) { $i = rand((MIN_N / 2), $n); return array(($n - $i), $i); } $numbers = array(3, 5, 7); for ($i = 0; $i < 100; ++$i) { shuffle($numbers); $p = $numbers[0]; $m = multiple($p); list($a, $b) = division($m); printf("%03d" . "\t" . "%04d-%04d-%d" . "\t" . "%4d + %4d = %4d %% %d = %d" . PHP_EOL, ($i + 1), $a, $b, $p, $a, $b, $m, $p, (($a + $b) % $p)); }