2011年12月02日

PHPでチェックデジットを計算する

なんてことはないコード集。バーコードなどに使われているチェックデジットを計算するルーチン。

JANで使われるモジュラス10ウェイト3-1
function modulus10w31($num)
{
$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;
}
ついでにモジュラス16
function modulus16($str)
{
$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) ];
}
おまけでモジュラス43
function modulus43($str)
{
$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) ];
}
使うときは入力値のvalidationを加えてください。

※モジュラス10ウェイト3-1の最後の桁が0のとき間違いがあったので修正(2011/12/03)
タグ:PHP
posted by usoinfo at 13:17 | Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]