なかったので作りました。
自己責任でお使いください
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; } }