Calcule

Signaler
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Statut
Membre
Dernière intervention
10 décembre 2017
-
Messages postés
95
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
14 décembre 2017
-
bonjour a tous ;-)

j'aurais besoin d une info !!

j'ai une chaine de type :1008B10A0201CME4893799

1008B10A0201 CME4893799
qui correspond a :mac adresse et une référence

j aimerais pouvoir manipuler cette ligne de chiffres et de lettres pour généré un numéro de licence qui serait de la même longueur.
la clé de calcule pourrait être un nom ou ou un mail peu importe.

j'ai bien vue quelques exemples mais qui n'accepte pas chiffre et lettre pour générer un code , alors avant de faire quoi que ce soit j aimerais voir si vous auriez des idées ou proposition qui me métrais sur une voie sur ..

Merci

cordialement a tous

2 réponses

Messages postés
653
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
22 février 2019
5
Bonjour,

Une système de hachage type SHA1 ou autre pourrait convenir, la clé fera toujours la même taille (par exemple j'obtient "79d58526d0e0bf4df4f01b383ed3f49c428aaa2a" pour mon "~/.profile").
Messages postés
30
Date d'inscription
lundi 11 janvier 2016
Statut
Membre
Dernière intervention
10 décembre 2017

merci pour l info ,

cordialement
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
Salut
Clé en main une fonction codage et décodage :

CONST
KZ1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789';
KZ2 = 'DhijklEFbcGH67IJKNO345PTUV28WXYZadLMefgmnQRSopqrsABCtuvwxyz 019';
KZ3 = '123456789012345678901234567890123456789012345678901234567890123';
Kmax = 63;


Function Codage(CH1:string; CLE:string):string;
var CH2:string; // chaine codée transmise par result
      i,Lch1,Nch1,Ncle,Xcle,Lcle,Ncod,Lcar,decal : integer;
begin
Lch1 := length(CH1);  // longueur  de la chaine à coder
Lcle := length(CLE);  // longueur de la clé
CH2 := dupestring('*',Lch1); // initialisation de la chaine codée
Xcle := 0; // initialisation du balayage clé
for i:=1 to Lch1 do begin
    Nch1 := pos(CH1[i],KZ1); // position du carac à coder dans la chaine KZ1
    if Nch1=0 then
       begin
       CH2[i] := CH1[i];
       continue;
       end;
    if Lch1=0 then
       begin
       CH2[i] := CH1[i];
       continue;
       end;
    Inc(Xcle); if Xcle>Lcle then Xcle := 1;
    Ncle := pos(CLE[Xcle],KZ1); // position du carac courant de la clé dans la chaine KZ1
    Decal := StrToInt(KZ3[Ncle]); // décalage du à la clé à apporter pour coder le carac
    Ncod := Nch1 + Decal;
    if Ncod>Kmax then Ncod := Ncod - Kmax;
    CH2[i] := KZ2[Ncod];
    end;
result := CH2;
end;


Function DeCodage(CH2:string; CLE:string):string;
var CH1:string; // chaine codée transmise par result
      i,Lch2,Nch2,Ncle,Xcle,Lcle,Ncod,Lcar,decal : integer;
begin
Lch2 := length(CH2);  // longueur  de la chaine à coder
Lcle := length(CLE);  // longueur de la clé
CH1 := dupestring('*',Lch2); // initialisation de la chaine codée
Xcle := 0; // initialisation du balayage clé
for i:=1 to Lch2 do begin
    Nch2 := pos(CH2[i],KZ2); // position du carac à coder dans la chaine KZ2
    if Nch2=0 then
       begin
       CH1[i] := CH2[i];
       continue;
       end;
    Inc(Xcle); if Xcle>Lcle then Xcle := 1;
    Ncle := pos(CLE[Xcle],KZ1); // position du carac courant de la clé dans la chaine KZ1
    Decal := StrToInt(KZ3[Ncle]); // décalage du à la clé à apporter pour coder le carac
    Ncod := Nch2 - Decal;
    if Ncod<1then Ncod := Ncod + Kmax;
    CH1[i] := KZ1[Ncod];
    end;
result := CH1;
end;


Dans cette version ,la clé ne doit comporter que des lettres (A-Z,a-z) des chiffres (0-9) et l'espace
(pas de lettres accentuées)
La chîne à coder peut être quelconque
Messages postés
95
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
14 décembre 2017

merci pour cette proposition intéressante je vais la tester merci