LoginSignup
0
0

More than 3 years have passed since last update.

チェックデジットの計算方法(PHPプログラム)

Last updated at Posted at 2021-03-22

チェックデジットの計算方法

チェックデジットの計算方法(プログラム)です、入力の桁数のチェックは
割愛したロジックになります。コマンドラインから実行ください。

尚、参考にサイトより(1)JAN コードのチェックデジットの計算方法を参照して作りました。
http://www.jpo.or.jp/magcode/info/checkdigit.html

github:: https://github.com/taoka-toshiaki/CheckDigit

実行
php CheckDigit.php 491009971074
CheckDigit.php
<?php
class CheckDigit{
    public static $array_number = [];
    public static $even_number_sum = 0;
    public static $odd_number_sum = 0;

    public static function main($val_number="")
    {
        $checkdigit_number =null;
        self::$array_number = self::number($val_number);
        $sum = self::sum(true) + self::sum(false);
        $checkdigit_number = self::checkdigit_number($sum);
        return $checkdigit_number;
    }

    public static function number($number=""){
        $number = (string)$number;
        $response_number = [];
        for($i=0;$i<strlen($number);$i++){
            $response_number[$i] = mb_substr($number,$i,1,"utf-8");
        }
        array_push($response_number,"");
        return  array_reverse($response_number);
    }

    public static function sum($flg=true){
        //$flg true=偶数 false=奇数
        foreach(self::$array_number as $key=>$val){
            if($flg===true){
                if(($key +1)%2===0 && (int)$key!==0){
                    self::$even_number_sum+=(int)$val;
                }
            }
            if($flg===false){
                if(($key +1)%2>0 && (int)$key!==0){
                    self::$odd_number_sum+=(int)$val;
                }
            }
        }

        return $flg===true ? (self::$even_number_sum * 3):self::$odd_number_sum;
    }

    public static function checkdigit_number($number=""){
        $number = (string)$number;
        return (int)mb_substr($number,(strlen($number) -1),1,"utf-8")===0?0:10 - (int)mb_substr($number,(strlen($number) -1),1,"utf-8");
    }
}

print "CheckDigit-Number=".CheckDigit::main((int)$argv[1]).PHP_EOL;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0