JANで使われるモジュラス10ウェイト3-1。
function modulus10w31($num)ついでにモジュラス16。
{
$arr = array_reverse(str_split($num));
for($i=0;$i<count($arr);$i++){
$t += ( ($i+1) % 2) == 0 ? intval($arr[$i]) : intval($arr[$i])*3;
}
$cd = 10 - intval( substr($t,strlen($t)-1,1) );
return $cd > 0 ? 10 - $cd : 0;
}
function modulus16($str)おまけでモジュラス43。
{
$maparr = str_split('0123456789-$:/.+ABCD');
$inarr = str_split($str);
$t = 0;
for($i=0;$i<count($inarr);$i++){
$t += array_search( $inarr[$i], $maparr);
}
return $maparr[ 16-($t % 16) ];
}
function modulus43($str)使うときは入力値のvalidationを加えてください。
{
$maparr = str_split('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%');
$inarr = str_split($str);
$t = 0;
for($i=0;$i<count($inarr);$i++){
$t += array_search( $inarr[$i], $maparr);
}
return $maparr[ ($t % 43) ];
}
※モジュラス10ウェイト3-1の最後の桁が0のとき間違いがあったので修正(2011/12/03)
タグ:PHP
▼レンタルサーバー・VPS比較表を見る▼