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