JANコードには13桁のコードと短縮の8桁コードが存在するが、いずれもバーコードの読み込みエラーを防ぐためにチェックデジットが存在する。正しいJANコードかどうかを判定する正規表現をPHPで実装してみたのが次のコード。
function verifyCheckDigit($jan_code){
return (preg_match(‘/^(?:(\d)(\d)(\d)(\d)(\d))?(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)$/’, $jan_code, $arr_arg) && (
(10 –
(($arr_arg[2] + $arr_arg[4] + $arr_arg[6] + $arr_arg[8] + $arr_arg[10] + $arr_arg[12]) * 3 +
$arr_arg[1] + $arr_arg[3] + $arr_arg[5] + $arr_arg[7] + $arr_arg[9] + $arr_arg[11]) % 10) % 10 == $arr_arg[13]
));
}
一応正規表現をベースにして処理が高速化できるよう最適化してあります。