PHPでJANコードのチェックデジットをバリデーションするコード

投稿者: ytyng 1年 前
/**
 * JANのチェックデジットを検証し、[成功?, メッセージ] を返す
 */
function validate_jan($jan): array
{
    $match = preg_match('|^(\d{12})(\d)$|', $jan, $matches);
    if (!$match) {
        return [false, '桁数エラー'];
    }
    $chars = str_split($matches[1]);
    $odd_total = 0;
    $even_total = 0;
    foreach ($chars as $i => $v) {
        if ($i % 2 == 0) {
            // 0スタートなので0は奇数桁
            $odd_total += $v;
        } else {
            $even_total += $v;
        }
    }
    $total = $even_total * 3 + $odd_total;
    $digit = (10 - ($total % 10)) % 10;
    if ($matches[2] != $digit) {
        return [false, "チェックディジットが不一致。本来は {$digit}"];
    }
    return [true, ""];
}
現在未評価

コメント

アーカイブ

2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011