Imagen


Bueno aqui teneis esta birria de codigo

[Enlace externo eliminado para invitados]

O

Mostrar/Ocultar

Metodo matematico: [Enlace externo eliminado para invitados]
Problemas: Tengo algo mal para American express que dan incorrectas.
Si alguien lo podria simplificar mucho mejor
No sabía yo que supieras del tema, cuando ' consiga ' una de American, te digo!..

Si sabes del tema, enviame privado :)
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
:O no sabía yo hacer esto de validar tarjetas pero ahora que veo tu procedimiento te lías demasiado, pudiendo hacer un simple bucle con no mas de 3 variables, te lías con 16 variables :S

Edito -
Dejo masomenos como quedaría un poco más optimizado (y aun se puede optimizar más)

Código: Seleccionar todo

def validar(n):
 if n[0] == "3":
  tipo = "American Express"
 elif n[0] == "4":
  tipo = "Visa"
 elif n[0] == "5":
  tipo = "Mastercard"
 elif n[0] == "6":
  tipo = "Discover"
 else:
  tipo = "Desconocido"

 longitud = len(n)
 i=0
 suma=0
 while i==longitud-1:
   if(i%2)==0:
     suma = int(n[i])*2
     if suma>9:
       suma = suma - 9
       o1 = o1 + suma
   else:
     o1 = o1 + int(n[i])




 if longitud == 14:
  if suma%10 == 0 and suma <=150:
   sol = "Correcto"
  else:
   sol = "No correcto"
 elif longitud == 15:
  if suma%10 == 0 and suma <=150:
   sol = "Correcto"
  else:
   sol = "No correcto"
 elif longitud == 16:
  if suma%10 == 0 and suma <=150:
    sol = "Correcto"
  else:
    sol = "No correcto"
 else:
  sol = "Longitud incorrecta"
 
 print "Tipo" ,tipo
 
 print "Longitud" , longitud
 
 print "Estado" ,sol
 l = "---"
 return l


entrada = raw_input("Numero ->")

operar = validar(entrada)
print operar
raw_input("...")
ahí ya no declaramos ochomil variables inútiles ;) ni escribimos la resta 8 veces a las variables, ni tenemos que sumar las ochomil variables al final :P todo nos queda en una sola ni tampoco tenemos que hacer dos if's para saber la longitud mejor hacemos el bucle hasta la longitud que es.
//mHmm..
Aqui el codigo mucho mas reducido...

Código: Seleccionar todo

cc = raw_input('CC Number: ')


if cc[0]== '3':
    print 'American Express'
elif cc[0]== '4':
    print 'Visa'
elif cc[0]== '5':
    print 'Master Card'
elif cc[0]== '6':
    print 'Discover'
else:
    print 'Unknow type'

ccsum = 0

for num in cc:
    i = int(num)*2
    if i < 9:
        ccsum += i
    else:
        i = int(i) - 9
        ccsum += i

if ccsum % 10 == 0 and ccsum <= 150:
    print 'CC Valid'
else:
    print 'CC No Valid'
1337 & culture!
PD: el algoritmo esta mal...
Por lo que lei son los numero impares multiplicados por dos si son menores a 9 se dejan asi sino lo son se lees resta nueve y despues de hacerlo a los numero IMPARES se suman todos el resultado debes ser menor a 150 y multipo del 10 en eso si estan correctos.
Pero segun esto son solo los impares los que se multiplican....
1337 & culture!
Responder

Volver a “Otros lenguajes”