有一个 10位的数字 N13 N12 N11 N10 N9 N8 N7 N6 N5 N4 N3 N2 N1 其中N1是校验位
1 首先偶数位相加乘3  C1=(N12+N10+N8+N6+N4+N2)*3
2 除了校验位的奇数位相加C2= N3+N5+N7+N9+N11
3 C3=(C1+C2)的个位
4 校验位N1=10-C3好久没做程序了,兄弟们帮我写个小程序吧?

解决方案 »

  1.   

    你既然已经知道了N13 N12 N11 N10 N9 N8 N7 N6 N5 N4 N3 N2 的值,那就算就是了
      

  2.   


    function GetCheckNum(const aNumber: string): Integer;
    var
      vEvenSum, vOddsSum, vCount : Integer;
    begin
      vEvenSum := 0;
      vOddsSum := 0;
      For vCount:= 1 to Length(aNumber) do
      begin
        if (i mod 2) = 0 then
          vEvenNum := vEvenNum + IntToStr(aNumber[i])
        else 
          vOddsSum := vOddsSum + IntToStr(aNumber[i]);
      end;
      vEvenNum := vEvenNum*3;
      Result := 10 - (vEvenNum+vOddsNum - Trunc((vEvenNum+vOddsNum)/10)*10);
    end;
      GetCheckNum('123567890');
      

  3.   

    IntToStr(aNumber[i]) 编译的时候出现
    there is no overloaded version of “inttostr” that can be called with these arguments
      

  4.   

    改为strtoint,没有测试,自己改一下嘛
      

  5.   

    13位的字符,如 "8888888888888"
    转换成数字然后+1 怎么做,用strtoint 的话数字太大,已经超出范围了