<?php 
$RUN_ID=$_REQUEST['RUN_ID'];
function EAN13($head, $num) {
  $s = $head.str_pad($num, 12 - strlen($head), "0", STR_PAD_LEFT);
  $j = $e = 0;
  for($i=0; $i<12; $i+=2) {
   $j += $s{$i};
   $e += $s{$i+1};
  }
  $n = 10 - (($e * 3 + $j) % 10);
  return $s.$n;
}echo EAN13(9,1000);
?>这段代码有问题,生成却是90000000100010,应该是9000000010000

解决方案 »

  1.   

    不熟悉这个编码的算法,找到点资料,貌似校验位的算法是这样的:
    代码改了一下,计算出来的校验位数值是7
    function EAN13($head, $num) {
      $s = $head.str_pad($num, 12 - strlen($head), "0", STR_PAD_LEFT);
      $C1 = $C2 = 0;
      for($i = 1; $i < 12; $i += 2) {
         $C1 += $s[$i];
         $C2 += $s[$i + 1];
      }
      $C2 *= 3;
      $CC = ($C1 + $C2) % 10;
      $C = (10 - $CC) % 10;
      return $s.$C;
    }echo EAN13(9,1000);
      

  2.   


    不对,检验码应该是0才对,是EAN13编码。
      

  3.   

    例如 echo EAN13(9,854); 这些都显示不正常。