本人因最近批量弄卡号,要根据luhn算法,得出银行卡号的最后一位校验码,如有一批卡号:6532 4393 8379 2311
6532 4393 8379 2322
6532 4393 8379 2333
6532 4393 8379 2344因卡号的最后一位是校验位,通过手动输入起始卡号,得出这起始卡号的最后一位,如输入起始卡号为:6532 4393 8379 2311这个卡号的最后一个1不用输入,结束位为:6532 4393 83792344这个卡号的最后一个4不用输入,只输入前面的15位,最终算出这个起始的最后一位校验码。我只需要输入前15的起和止,即可自动算出这批卡号的最后一位校验码,该如何弄呢?高手们指点一下

解决方案 »

  1.   

    http://blog.sina.com.cn/s/blog_62e1faba010147k4.html这是模10算法的介绍,我想用delphi代码实现一批卡号的最后一位校验码
      

  2.   

    算法帮你写好了,其他自己写吧。function CalcLunh(const data: string): Char;
    var
      i: Integer;
      sum: Integer;
      b: Byte;
    begin
      sum := 0;
      for i := 1 to Length(data) do
      begin
        b := Ord(data[i]) - Ord('0');
        if i mod 2 = 0 then
        begin
          b := b * 2;
        end;
        if b > 9 then
        begin
          b := b mod 10 + b div 10;
        end;
        sum := sum + b;
      end;
      sum := (10 - sum mod 10) mod 10;
      Result := Chr(sum + Ord('0'));
    end;调用
    CalcLunh('653243938379231')
    卡号中如果有空格神马的,自己处理掉就OK。