viernes, 4 de noviembre de 2011

Comprobar numeración de tarjeta de crédito

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