Al igual que con los números de cuenta cada tipo de tarjeta de crédito tiene una configuración determinada, os voy a dejar un bloque de código donde se comprueban los formatos para los diferentes tipos de tarjetas de credito, Visa, MasteCard, American Express, Discover y Dinners Club. A ver si os vale
vDigito:=COPYSTR(NumeroTarjeta,1,1);
vDigito2:=COPYSTR(NumeroTarjeta,1,2);
vDigito4:=COPYSTR(NumeroTarjeta,1,4);
//American express
IF "Tipo Tarjeta"="Tipo Tarjeta"::"American Express" THEN BEGIN
IF (vDigito2 = '34') OR (vDigito2 = '37') THEN BEGIN
IF (STRLEN(NumeroTarjeta) <> 15) THEN
ERROR(TXT1,STRLEN(NumeroTarjeta),"Tipo Tarjeta");
END
ELSE
ERROR(TXT2,rPolizas.NumeroTarjeta,rPolizas."Tipo Tarjeta");
END;
//Visa
IF "Tipo Tarjeta"="Tipo Tarjeta"::Visa THEN BEGIN
IF vDigito = '4' THEN BEGIN
IF (STRLEN(NumeroTarjeta) <> 13) AND (STRLEN(NumeroTarjeta) <> 16) THEN
ERROR(TXT1,STRLEN(NumeroTarjeta),"Tipo Tarjeta");
END
ELSE
ERROR(TXT2,NumeroTarjeta,"Tipo Tarjeta");
END;
//MasterCard
IF "Tipo Tarjeta"="Tipo Tarjeta"::MasterCard THEN BEGIN
IF (vDigito2 >= '51') AND (vDigito2 <= '55') THEN BEGIN
IF (STRLEN(NumeroTarjeta) <> 16) THEN
ERROR(TXT1,STRLEN(NumeroTarjeta),"Tipo Tarjeta");
END
ELSE
ERROR(TXT2,NumeroTarjeta,"Tipo Tarjeta");
END;
//Discover
IF "Tipo Tarjeta"=."Tipo Tarjeta"::Discover THEN BEGIN
IF vDigito4 = '6011' THEN BEGIN
IF (STRLEN(NumeroTarjeta) <> 16) THEN
ERROR(TXT1,STRLEN(NumeroTarjeta),"Tipo Tarjeta");
END
ELSE
ERROR(TXT2,NumeroTarjeta,"Tipo Tarjeta");
END;
//Diners club
IF "Tipo Tarjeta"="Tipo Tarjeta"::"Diners club" THEN BEGIN
IF (vDigito2 = '30') OR (vDigito2 = '36') OR (vDigito2 = '38') THEN BEGIN
IF (STRLEN(NumeroTarjeta) <> 14) THEN
ERROR(TXT1,STRLEN(NumeroTarjeta),"Tipo Tarjeta");
END
ELSE
ERROR(TXT2,NumeroTarjeta,"Tipo Tarjeta");
END;
//Comprobar numeración de tarjeta
vNuevoNT:='';
FOR vIndex:=1 TO STRLEN(NumeroTarjeta) DO BEGIN
vNuevoNT:='';
IF vIndex MOD 2 <> 0 THEN BEGIN
EVALUATE(vNoperar,FORMAT(NumeroTarjeta[vIndex]));
IF vNoperar * 2 > 9 THEN BEGIN
vNuevoNT:=FORMAT((vNoperar*2)-9);
END
ELSE BEGIN
vNuevoNT:=FORMAT((vNoperar*2));
END
END
ELSE BEGIN
vNuevoNT:=FORMAT(NumeroTarjeta[vIndex]);
END;
EVALUATE(vConvert,vNuevoNT);
vResultado+=vConvert;
END;
IF (vResultado MOD 10 <> 0) AND (vResultado > 150) THEN
ERROR('El numero de tarjeta %1 no es correcto',NumeroTarjeta);
END;
No hay comentarios:
Publicar un comentario