Annonce

Réduire
Aucune annonce.

[Débutant] Carte de crédit

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [Débutant] Carte de crédit

    Bonjour,

    Voici un nouveau challenge, où j'espère ne pas vous donner trop d'illusions sur l'accès à une carte de crédit.

    PRINCIPE

    Vous avez un site commercial où vous acceptez les paiements en ligne via la carte de crédit. Pour cela, vous vérifierez le type de carte, ainsi que la validité du numéro de la carte (Pour éviter les fautes de frappes)

    LES DIFFÉRENTS TYPES DE CARTES

    Le 1er chiffre du numéro indique le type de carte de crédit.

    4 -> VISA CARD
    5 -> MASTER CARD
    6 -> DISCOVER
    Autre -> UNKNOWN

    ILLUSION

    Ne vous faîtes pas d'illusions, malgré le fait que je suis incapable de donner des cours de carding, il est évident que cette simple vérification, ne vous permettra pas de frauder. Dans un site on vous demande les 3 chiffres derrière la carte permettant à la banque d'autoriser le paiement.

    ALGORITHME

    Pour vérifier qu'un numéro de carte est valide, il faudra utiliser l'algorithme de Luhn (ou mod10), et pour cela wikipedia l'explique suffisamment bien. Évitez de recopier bêtement des codes tout fait, surtout qu'ils ne sont pas très beau en général et peu explicite sur la démarche.

    LANGAGE DE PROGRAMMATION

    Python version 2.7 ou 3.x

    PRESENTATION

    ÉTAPE 1 Ligne de commande (CLI)

    Code:
    python3 luhn.py 5234567890123456
    MASTER CARD -> valid or not valid
    ÉTAPE 2 Tkinter ou PyQt

    Un texte -> number card :
    Une zone de saisie de texte -> insert card number (par défaut)
    Un bouton valid -> Pour vérifier la validité de la saisie du numéro
    Un bouton cancel -> Supprimera la saisie du texte et replacera "insert card number" dans la zone
    Un bouton quit -> Quitte le programme

    Une fenêtre successful entry -> Fenêtre affichant la réussite du test de Luhn, ainsi que le type de carte.
    Une fenêtre error entry -> Fenêtre affichant une erreur dans la saisie du numéro

    CONVENTION

    Une indentation de 4 espaces est obligatoire, voir la PEP8 si vous ne comprenez pas pourquoi...

    Ne dépassez pas 80 caractères sur 1 ligne de code, idem voir PEP8

    Merci pour nos petits yeux!

    Bon courage...

  • #2
    on donne une aide ou pas ?

    Code:
    # algo
    def luhn(n): 
    	r = [int(ch) for ch in str(n)][::-1]
    	return (sum(r[0::2]) + sum(sum(divmod(d*2,10)) for d in r[1::2])) % 10 == 0
    #test
    for n in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    	print(n, luhn(n))
    dis moi si tu veux que je delete ce message. le truc c'est que cet algo est tellement connu qu'il est difficile de ne pas trouver un source correct dessus... à toi de me dire.
    sigpic

    Cyprium Download Link

    Plus j'étudie plus j'me rends compte que je n'sais rien.

    †|

    Commentaire


    • #3
      Je préférerais un code plus long mais plus lisible, en une seule ligne, sachant que c'est pour débutant, difficile de bien comprendre la démarche.

      Le principe même python est simple et explicite, mais je n'interdis pas de le faire à condition qu'on comprenne bien cette ligne.

      Il y a des notions de slicing, la fonction sum (3 fois) et divmod. beaucoup de fonctions, ça me paraît pas très efficace en plus.

      J'ai pas optimisé, mais un code naïf ressemblerait à ça

      Code:
      def calculate(char):
          n = int(char) * 2
          if n >= 10:
              x, y = str(n)
              return str(int(x) + int(y))
          else:
              return str(n)
      
      def is_valid(number):
          result = ''
          value = 0
          for ind, num in enumerate(number):
              if ind % 2 != 0:
                  val = calculate(num)
                  result += val
              else:
                  result += num
          for i in result:
              value += int(i)
          return value%10==0
      
      print(is_valid("972487086"))
      à optimiser, mais demain...

      Edit :

      Une version plus optimisée en utilisant les slicings comme ci-dessus (Sakarov)

      Code:
      def calculate(liste):
          my_sum = 0
          for n in liste:
              val = n * 2
              if val >= 10:
                  x, y = str(val)
                  my_sum += (int(x) + int(y))
              else:
                  my_sum += val
          return my_sum
      
      def is_valid(number):
          result = 0
          result += calculate(map(int, number[1::2]))
          result += sum(map(int, number[0::2]))
          return result%10==0
      
      print(is_valid("972487086"))
      Dernière modification par fred, 13 mars 2013, 11h16.

      Commentaire


      • #4
        J'avais deja entendu parler du carding mais jamais pratiquer ou vu sur des sites le fonctionnement, merci pour les explications

        Commentaire


        • #5
          luther, ce n'est pas du carding ! le carding est le fait de voler des CB (par Internet) et d'en vider les comptes associés.

          là, fred développe un algo (luhn) utilisé pour vérifier le type de carte et la validité de celle-ci.

          rien à voir

          Voici une déf du carding : http://hackademics.fr/showthread.php?398-Carding
          sigpic

          Cyprium Download Link

          Plus j'étudie plus j'me rends compte que je n'sais rien.

          †|

          Commentaire


          • #6
            Oups pas vu cette rubrique, desoler, j'irais voir

            Commentaire

            Chargement...
            X