Generacion de cc en Python[Duda]

Iniciado por Ricardo95, 25 Enero 2011, 18:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Ricardo95

Andaba haciendo un code para generar los 16 digits de una cc valida e hice este code,pero no me da ninguna salida haber si le ven el fallo.
El algoritmo consiste en multiplicar por 2 las cifras que ocupan por una posicion impar, si es mayor que nueve el resultado restarle dicho numero con los nuevos resultados que obtenemos los sumamos con los numeros de la sposiciones pares y si es multiplo de 10 el resultado es correcto.

import random

comprobacion=0
while comprobacion%10!=0:
   
   #El número de cifras representa la posicion de la cifra en el numero de la cc
   uno=random.randint(1,9)
   dos=random.randint(1,9)
   tres=random.randint(1,9)
   cuatro=random.randint(1,9)
   cinco=random.randint(1,9)
   seis=random.randint(1,9)
   siete=random.randint(1,9)
   ocho=random.randint(1,9)
   nueve=random.randint(1,9)
   diez=random.randint(1,9)
   once=random.randint(1,9)
   doce=random.randint(1,9)
   trece=random.randint(1,9)
   catorce=random.randint(1,9)
   quince=random.randint(1,9)
   dieciseis=random.randint(1,9)

   unp=uno*2

   if unp>9:
      unp-=9

   dop=tres*2

   if dop>9:
      dop-=9

   trp=cinco*2

   if trp>9:
      trp-=9

   cap=siete*2

   if cap>9:
      cap-=9

   cip=nueve*2

   if cip>9:
      cip-=9

   sep=once*2

   if sep>9:
     sep-=9

   seep=trece*2

   if seep>9:
     seep-=9

   oip=quince*2

   if oip>9:
      oip-=9

   comprobacion=unp+dop+trp+cap+cip+sep+seep+diez+doce+catorce+dieciseis
   if comprobacion%10==0:
      n=[unp,dop,trp,cap,cip,sep,seep,diez,doce,catorce,dieciseis]
      we=''.join(n)
      print we
print "Hecho"


Karcrack

Cita de: Ricardo95 en 25 Enero 2011, 18:11 PM
El algoritmo consiste en multiplicar por 2 las cifras que ocupan por una posicion impar, si es mayor que nueve el resultado restarle dicho numero con los nuevos resultados que obtenemos los sumamos con los numeros de la sposiciones pares y si es multiplo de 10 el resultado es correcto.
Código (python) [Seleccionar]
from random import randint

n=[]
for w in range(1,16):
    i=randint(1,9)
    if w%2:
        i*=2
        if i>9:i-=9
    n+=i,

print ''.join(map(str,n))

if sum(n)%10:
    print ":)"
else:
    print ":("

Tu haces cosas extrañas en tu codigo... pero según tu definición del algoritmo mi codigo funciona perfecto :xD

PD: Hubiese sido mas sencillo entender el algoritmo si usases los signos de puntuación... ya sabes: comas, puntos... etc

leogtz

Cita de: Karcrack en 25 Enero 2011, 21:53 PM
Código (python) [Seleccionar]
from random import randint

PD: Hubiese sido mas sencillo entender el algoritmo si usases los signos de puntuación... ya sabes: comas, puntos... etc
[/quote]

Como toda gente normal.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Ricardo95

Muchas gracias, se muy poco de python intentare etender tu code. Repito gracias