Archivo

martes, 25 de enero de 2011

Validar Tarjetas de Credito


     Bueno la imagen lo dice todo, después de ver esto se m ocurrió codificar algo para automatizar la validación (o porque no, generar nuestros propios números validos ;) pero encontré q ya esta bastante trillado el tema, así q me voy a limitar a mostrar un código hecho en JavaScript vs. un código realizado en Python (se q no es una comparacion justa :o) pero veamos código!!


function checkValidity(number)
{ 
 var reversedNum = number.reverse();
 var notDouTotal = 0; 
 var doubNumbers=new Array(); 
 var arrayIndex = 0; 
 var sum = 0; 
 var stringTest = "";
  
 for (i=0;i<number.length;i++)
 {
  var charInNum = reversedNum.charAt(i);
  var intValue = parseInt(charInNum);
  
  if(i%2 == 0)
   notDouTotal = notDouTotal + intValue;
  else {
   doubNumbers[arrayIndex] = intValue;
   arrayIndex++;
  }
 } 
 for (x=0;x<doubNumbers.length;x++)
 {
  var doubNumb = doubNumbers[x];  
  if(doubNumb*2>=10)
  {
   theString = doubNumb*2 + "";
   sum = parseInt(theString.charAt(0)) + parseInt(theString.charAt(1));
   notDouTotal = notDouTotal + sum;
   sum = 0;   
   //stringTest = stringTest + " + " + theString.charAt(0) + " + " + theString.charAt(1);
  }
  else 
  {
   notDouTotal = notDouTotal + doubNumb*2;
   //stringTest = stringTest + " + " + doubNumb*2;
  }    
  
 }
 if(notDouTotal%10 == 0)
  return "Yes, it is a valid number (" + notDouTotal + ")";
 else
  return "No, it is NOT a valid number (" + notDouTotal + ")";
}


ahora veamos como reemplazar esto con una linea d código en python y obtener exactamente el mismo resultado (ambos codigos validan un numero)


>>> s = '4417123456789113'
>>> sum([t%10 + t/10 for t in [int(c)*2 for c in s[::2]]]) + sum([int(c) for c in s[1::2]])

Recordemos, un número de targeta de credito es válido si el resultado de esta operación es múltiplo de 10, sencillo y bonito verdad? XD

Para mas información ...

http://www.mint.com/blog/trends/credit-card-code-01202011/
http://gizmodo.com/5740621/what-do-all-the-numbers-on-your-credit-card-mean
http://ctthosting.com/cc/credit.js

No hay comentarios: