Contributor: CAMERON CLARK {$F+,D+,L+} unit Vericard; interface function Vc(c : string) : char; implementation function Vc(c : string) : char; var card : string[21]; Vcard : array[0..21] of byte absolute card; Xcard : integer; Cstr : string[21]; y, x : integer; begin x := 0; Cstr := ' '; Cstr := ''; fillchar(Vcard, 22, #0); card := c; for x := 1 to 20 do if (Vcard[x] in [48..57]) then Cstr := Cstr + chr(Vcard[x]); card := ''; card := Cstr; Xcard := 0; if NOT odd(length(card)) then for x := (length(card) - 1) downto 1 do begin if odd(x) then y := ((Vcard[x] - 48) * 2) else y := (Vcard[x] - 48); if (y >= 10) then y := ((y - 10) + 1); Xcard := (Xcard + y) end else for x := (length(card) - 1) downto 1 do begin if odd(x) then y := (Vcard[x] - 48) else y := ((Vcard[x] - 48) * 2); if (y >= 10) then y := ((y - 10) + 1); Xcard := (Xcard + y) end; x := (10 - (Xcard mod 10)); if (x = 10) then x := 0; if (x = (Vcard[length(card)] - 48)) then Vc := Cstr[1] else Vc := #0 end; END. { .....................DRIVER EXAMple........ } {$A-,B+,D-,E-,F-,I+,L-,N-,O-,R+,S+,V+} {$M 2048,0,4096} program ValiCard; { Test routine for the Mod 10 Check Digit CC validator... } uses dos, crt, VeriCard; var card : string[22]; k : char; procedure Squawk(Noise : byte); begin case Noise of 1 : begin Sound(400); Delay(200); Sound(200); Delay(200); Nosound end; 2 : begin Sound(392); Delay(55); Nosound; Delay(30); Sound(523); Delay(55); Nosound; Delay(30); Sound(659); Delay(55); Nosound; Delay(30); Sound(784); Delay(277); Nosound; Delay(30); Sound(659); Delay(55); Nosound; Delay(30); Sound(784); Delay(1200); Nosound end end { case } end; BEGIN k := #0; clrscr; fillchar(card, 22, #0); writeln('VC: Integer Modulo-10 Visa/Mastercard/Amex Check-Digit'); writeln(' verification routine. (c) 1990 Daniel J. Karnes'); writeln; write(' Please enter a Credit Card number: '); readln(card); writeln; writeln; if (length(card) > 12) then k := Vc(card); if (k in ['3', '4', '5']) then Squawk(2) else Squawk(1); case k of #0 : writeln(' Could NOT verify this number with any card type.') '3' : writeln(' Card was verified as a valid Amex Card Number.'); '4' : writeln(' Card was verified as a valid VISA Card Number.'); '5' : writeln(' Card was verified as a valid Mastercard Number.') end END. ................... Hope that helps. I've only tried it on one card number BUT it did work for the one and the info was received from someone in the business.