Validador de tarjeta de crédito para java

Necesito hacer una validación del número de tarjeta de crédito.

Cuando busqué en Google encontré org.apache.commons.validator.CreditCardValidator . Pero parece que no está funcionando correctamente. Cuando paso un carácter que no es un dígito, también es verdadero.

Código para Apache CreditCardValidator :

 String ccNumber = "378282246310005"; CreditCardValidator creditCardValidator = new CreditCardValidator(); if(!creditCardValidator.isValid(ccNumber)) throw new Exception("Credit Card Number is not a valid one!"); 

Luego, escribí los siguientes métodos para validar los números de las tarjetas de crédito según el tipo de tarjeta y el número de la tarjeta (usando el algoritmo de luhn).

Validador de CardType (nulo si un tipo de tarjeta no es válido)

 public String getCCType(String ccNumber){ String visaRegex = "^4[0-9]{12}(?:[0-9]{3})?$"; String masterRegex = "^5[1-5][0-9]{14}$"; String amexRegex = "^3[47][0-9]{13}$"; String dinersClubrRegex = "^3(?:0[0-5]|[68][0-9])[0-9]{11}$"; String discoverRegex = "^6(?:011|5[0-9]{2})[0-9]{12}$"; String jcbRegex = "^(?:2131|1800|35\\d{3})\\d{11}$"; String commonRegex = "^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$"; try { ccNumber = ccNumber.replaceAll("\\D", ""); return (ccNumber.matches(visaRegex) ? "VISA" : ccNumber.matches(masterRegex) ? "MASTER" :ccNumber.matches(amexRegex) ? "AMEX" :ccNumber.matches(dinersClubrRegex) ? "DINER" :ccNumber.matches(discoverRegex) ? "DISCOVER" :ccNumber.matches(jcbRegex) ? "JCB":null); } catch (Exception e) { e.printStackTrace(); } return null; } 

Validador CardNumber utilizando el algorithem de Luhn.

 public boolean isValidCardNumber(String ccNumber){ try { ccNumber = ccNumber.replaceAll("\\D", ""); char[] ccNumberArry = ccNumber.toCharArray(); int checkSum = 0; for(int i = ccNumberArry.length - 1; i >= 0; i--){ char ccDigit = ccNumberArry[i]; if((ccNumberArry.length - i) % 2 == 0){ int doubleddDigit = Character.getNumericValue(ccDigit) * 2; checkSum += (doubleddDigit % 9 == 0 && doubleddDigit != 0) ? 9 : doubleddDigit % 9; }else{ checkSum += Character.getNumericValue(ccDigit); } } return (checkSum != 0 && checkSum % 10 == 0); } catch (Exception e) { e.printStackTrace(); } return false; } 

Quiero saber,

  1. ¿Hay alguna tercera clase partida para validar las tarjetas de crédito que no sean org.apache one?
  2. ¿Hay algún problema con mi código? (Lo probé varias veces. Hasta ahora, bien. Sólo quiero saber si se pudo detectar algo que no detecté).

Referencias: ¿Cómo se detecta el tipo de tarjeta de crédito según el número?

Puede encontrar la implantación personalizada del validador de tarjetas de crédito aquí, que realiza tanto la validación del número de tarjeta de crédito como la detección del tipo de tarjeta de crédito

http://www.esupu.com/credit-card-validator-java/

Hice esto hace mucho tiempo, Sorry Code está en C. Fácilmente convertible. Espero que esto te ayudará.

 #include  #include  #include  int CardNoChecker(unsigned long long int Number) { int dijts=0; int Ans=0; { unsigned long long int k=1; while(Number%k!=Number) { dijts=dijts+1; k=k*10; } } { int i=1; int Product=0; int Sum=0; for(i=dijts;i>=1;i--) { if(i%2==0) { if((Number%10)*2<10) Product = Product + ( Number % 10 ) * 2 ; else { int No=(Number%10)*2; Product = Product + No/10; Product = Product + No%10; } } else { Sum = Sum + ( Number % 10 ) ; } Number=Number /10; } Ans = Sum + Product ; } if(Ans%10==0) return (1); else return (0); } int main() { unsigned long long int CardNO; int valid=0; while(!valid) { int CnV=0; int VC=0; int AE=0; int MC=0; printf("Enter Card NO : "); scanf("%llu",&CardNO); if(CardNO/1000000000000==4 || CardNO/1000000000000000==4) { VC=1; } else if(CardNO/10000000000000==34 ||CardNO/10000000000000==37) { AE=1; } else if(CardNO/100000000000000==51 || CardNO/100000000000000==52 || CardNO/100000000000000==53 || CardNO/100000000000000==54 || CardNO/100000000000000==55) { MC=1; } CnV=CardNoChecker(CardNO); if(CnV && MC ) printf("This is a Valid Master Card\n\n"); else if(CnV && VC ) printf("This is a Valid Visa Card\n\n"); else if(CnV && AE ) printf("This is a Valid American Express Card\n\n"); else printf("Card is Not Valid'\n\n"); } return (0); } 
Intereting Posts