PHPでGS1からJANを作成

なかったので作りました。

 自己責任でお使いください

class gs1 {
    function gs1tojan($gs1) {
        //すべて半角数字または()であるかをチェック
        if (preg_match("/^[0-9()]+$/", $gs1))
            //最初の桁のインジケーターを判断
            if(mb_strlen($gs1)==18){
                if (strpos($gs1, '(010)') === 0|strpos($gs1, '(01)0') === 0) {
                    $janNoCheckDigit=mb_substr($gs1, 5, 12);
                    return $janNoCheckDigit.gs1::calcJanCodeDigit($janNoCheckDigit);
                }
            }else if(mb_strlen($gs1)==17){
                if (strpos($gs1, '(01)') === 0) {
                    $janNoCheckDigit=mb_substr($gs1, 4, 12);
                    return $janNoCheckDigit.gs1::calcJanCodeDigit($janNoCheckDigit);
                }
            }else if(mb_strlen($gs1)==16){
                if (strpos($gs1, '010') === 0) {
                    $janNoCheckDigit=mb_substr($gs1, 3, 12);
                    return $janNoCheckDigit.gs1::calcJanCodeDigit($janNoCheckDigit);
                }
            }else if(mb_strlen($gs1)==15){
                if (strpos($gs1, '01') === 0) {
                    $janNoCheckDigit=mb_substr($gs1, 2, 12);
                    return $janNoCheckDigit.gs1::calcJanCodeDigit($janNoCheckDigit);
                }
            }else if(mb_strlen($gs1)==14){
                if (strpos($gs1, '1') === 0) {
                    $janNoCheckDigit=mb_substr($gs1, 1, 12);
                    return $janNoCheckDigit.gs1::calcJanCodeDigit($janNoCheckDigit);
                }
            }
        }
        return false;
    }
    function calcJanCodeDigit($num) {
        $arr = str_split($num);
        $odd = 0;
        $mod = 0;
        for($i=0;$i<count($arr);$i++){
            if(($i+1) % 2 == 0) {
                //偶数の総和
                $mod += intval($arr[$i]);
            } else {
                //奇数の総和
                $odd += intval($arr[$i]);
            }
        }
        //偶数の和を3倍+奇数の総和を加算して、下1桁の数字を10から引く
        $cd = 10 - intval(substr((string)($mod * 3) + $odd,-1));
        //10なら1の位は0なので、0を返す。
        return $cd === 10 ? 0 : $cd;
    }   
}

↓弊社で開発、販売しているソフトウェアです↓

MediMonitor無料ダウンロード  

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です