0

Générer un numéro de licence

Je suis partis d’ algorithme pas très compliqué que j’ai trouver sur la toile , pour vous montrer le principe, bien sur on peut faire quelque chose de très lourd et incassable , mais la n’est pas le but.

soit la chaine de sortie de la forme : xxxx-x-xxxx soit debut-milieu-fin
nous allons travailler sur l’exemple
user=demo et licence=1172-4-6879

Pour arriver à cette générer cette  licence nous passerons par 3 etapes, la génération du debut, du milieu et de la fin

Explication de l’algorithme
calcul du début de la licence

Pour tout les caractère présent dans le nom de l’user,

je récupère le code ascii du caractère et je le multiplie au nombre de lettre du nom de l’user

 

fonction retournant le début de la licence
    ENTIER fonction (CAR user)

CAR car
ENTIER i, total

POUR i ALLANT DE  1 A longueur(user)
car<–ascii(milieu(user,i,1)
total<– total + (car * longueur(user))
PROCHAIN i
RETOURNE total

calcul du mileu de la licence
pour chaque lettre du nom de l’user
on compte combien de fois les lettres sont présentes
et on les additionnes
Foncttion retournant le milieu de la licence
 
 
ENTIER fonction (CAR user)
 
ENTIER cpt, i, j, milieu
CAR chaine
 
POUR i ALLANT DE  1 A longueur(User)
  Cpt <-- 0
  chaine <-- milieu(User, i, 1)
  POUR j ALLANT DE 1 A longueur(User)
    chaine2 <-- milieu(User, j, 1)
    SI chaine <-- chaine2 ALORS 
       Cpt <-- Cpt + 1
    FSI
   PROCHAIN j
      milieu <-- milieu + Cpt
PROCHAIN i
 
RETOURNE milieu

calcul de la fin de la licence
On concatene la valeur ascii de la premiere et de la derniere lettre
Fonction retournant la fin de la licence
ENTIER fonction (CAR user)
 
ENTIER fin
 
fin = Ascii(milieu(User, 1, 1)) & Ascii(milieu(User, longeur(User), 1))
 
RETOURNE fin

 

1 – conception de votre form :

Créer un nouveau projet , et concevez votre form1 avec

  • 2 zones de texte : T_user et T_licence
  • 2 boutons : B_genere, B_verifie

2 – le code :

Dans l’évènement Click du bouton générer mettez le code suivant :
qui a pour effet de vérifier si les champs sont rempli, si c’est le cas la fonction de génération sera appelé

bouton générer
'si le nom de l'user n'est pas fourni
'on genere un numero de démo
If T_user.Text = "" Then
   T_user.Text = "Demo"
End If
'lance la fonction de generation
T_licence.Text = genereLicence(T_user.Text)
Voici ensuite la fonction genereLicence
Fonction genereLicence
Public Function  genereLicence(ByVal User As String) As String
Dim chaine, chaine2 As String
Dim Cpt, milieu As Integer
Dim debut, fin As String
 
'tout en majuscule
User = UCase(User)
 
'calcule du début de la licence
'addition de la valeur ascii de chaque caractere * le nombre de lettre de l'user
For i = 1 To Len(User)
   chaine = Mid(User, i, 1)
   debut = debut + (Asc(chaine) * Len(User))
Next i
 
' calcule du milieu de la licence
'pour chaque lettre du nom de l'user
'on compte combien de fois les lettres sont présente
'et On les additionne
For i = 1 To Len(User)
   Cpt = 0
   chaine = Mid(User, i, 1)
   For j = 1 To Len(User)
      chaine2 = Mid(User, j, 1)
      If chaine = chaine2 Then Cpt = Cpt + 1
   Next j   milieu = milieu + Cpt
Next i
 
' Fin de la licence
' On concatene la valeur ascii de la premiere et de la derniere lettre
fin = Asc(Mid(User, 1, 1)) & Asc(Mid(User, Len(User), 1))
 
'la licence
genereLicence = debut & "-" & milieu & "-" & fin
 
End Function

Passons maintenant à la vérification
Dans le click du bouton vérifier , mettez le code suivant, qui aura pour de tester le numero de licence et de vous retourner si le numero est bon ou pas
Bouton vérifier
If T_user.Text  "" And T_licence.Text  "" Then
   Dim rep As Boolean
   rep = verifieLicence(T_user.Text, T_licence.Text)
   If rep = True Then
      MsgBox("La licence est OK", vbInformation, "Licence")
   Else
      MsgBox("Mauvais numéro de licence", vbInformation, "Licence")
   End If
End If
 

Voici maintenant la fonction de vérification qui reprend l’algorithme à l’envers (le code est commenté)
Fonction verifieLicence
Public Function  verifieLicence(ByVal user As String, ByVal licence As String) As Boolean
Dim car1, car2, debut As String
Dim chaine, chaine2 As String
Dim cpt, milieu As Integer
 
'exemple
'user : DEMO
'licence : 1172-4-6879
 
'on recupere chaque morceau de la la licence
'tab(0)=1172 , tab(1)=4, tab(2)=6879
Dim tab() As String = Split(licence, "-")
 
'on met toute les lettres en majuscule
user = UCase(user)
 
'etape 1
' On commence par la fin soit 6879 contenu dans tab(2)
'on recupere 68 que l'on traduit en caractere soit D
car1 = Chr(Mid(tab(2), 1, 2))
'on prend 79 que l'on traduit en caractere soit O
car2 = Chr(Mid(tab(2), Len(tab(2)) - 1, 2))
'si la premiere lettre de l'user ne correspond pas au car1 On sort
If Mid(UCase(user), 1, 1)  car1 Then verifieLicence = False : Exit Function
'si la derniere lettre de l'user ne correspond pas au car2 On sort
If Mid(UCase(user), Len(user), 1)  car2 Then verifieLicence = False : Exit Function 
'etape 2
'le milieu soit 4 dans notre exemple
' recherche des tirets
'postion du premier tiret
Dim pos1 As Integer = InStr(licence, "-")
'position du second tiret
Dim pos2 As Integer = InStrRev(licence, "-")
 
' Calcul pour trouver le numéro du centre
' On va compter combien de fois sont présente les lettres
For i = 1 To Len(user)
   cpt = 0
   chaine = Mid$(user, i, 1)
   For j = 1 To Len(user)
      chaine2 = Mid$(user, j, 1)
      If chaine = chaine2 Then cpt = cpt + 1
   Next j
'et On les additionne
milieu = milieu + cpt
Next i
'verification pour le milieu
If CInt(tab(1))  milieu Then verifieLicence = False : Exit Function
 
  
'etape 3 - le debut - 1172
For i = 1 To Len(user)
   chaine = Mid(user, i, 1)
debut = debut + (Asc(chaine) * Len(user)) 'addition de ASC x le nombre de caractère du nom d'user
Next i
'verification
If debut  CInt(tab(0)) Then verifieLicence = False : Exit Function
 
'on est arrivé jusque la , la licence est bonne
verifieLicence = True
 
End Function

Voila , à vous maintenant de séparer les 2 procédures, une application uniquement pour la génération et la distribution de vos cléfs
et une que vous devez mettre dans votre application pour vérifier les licences entrées par les utilisateurs

 

 

 

je suis partis sur un algorithme pas trés compliqué pour vous montrer le principe, bien sur on peut faire quelque chose de très lourd et incassable , mais la n’est pas le but.

soit la chaine de sortie de la forme : xxxx-x-xxxx soit debut-milieu-fin
nous allons travailler sur l’exemple
user=demo et générer la licence : licence=1172-4-6879 

pour arriver a cette licence nous passerons par 3 etapes, la génération du debut, du milieu et de la fin

 

Explication de l’algorithme

 

calcul du début de la licence
Pour tout les caractère présent dans le nom de l’user,
je récupère le code ascii du caractère et je le multiplie au nombre de lettre du nom de l’user

Citation :pour i=1 à longueur(user)
car=ascii(milieu(user,i,1)
total= total + (car * longueur(user))
prochain i

calcul du mileu de la licence
pour chaque lettre du nom de l’user
on compte combien de fois les lettres sont présente
et on les additionnes

Citation :pour i = 1 à longueur(User)
Cpt = 0
chaine = milieu(User, i, 1)
pour j = 1 à longueur(User)
chaine2 = milieu(User, j, 1)
si chaine = chaine2 alors Cpt = Cpt + 1
prochain j
milieu = milieu + Cpt
prochain i

calcul de la fin de la licence
On concatene la valeur ascii de la premiere et de la derniere lettre

Citation :fin = Ascii(milieu(User, 1, 1)) & Ascii(milieu(User, longeur(User), 1))

 

You must be logged in to post a comment.