Calcule

ratatouille53 30 Messages postés lundi 11 janvier 2016Date d'inscription 10 décembre 2017 Dernière intervention - 29 nov. 2017 à 23:06 - Dernière réponse : tsainvet 96 Messages postés samedi 27 mars 2004Date d'inscription 14 décembre 2017 Dernière intervention
- 14 déc. 2017 à 17:19
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
Afficher la suite 

4 réponses

Répondre au sujet
MiniApp 596 Messages postés lundi 21 juillet 2014Date d'inscription 19 avril 2018 Dernière intervention - 9 déc. 2017 à 18:46
0
Utile
1
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").
ratatouille53 30 Messages postés lundi 11 janvier 2016Date d'inscription 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 11:08
merci pour l info ,

cordialement
Commenter la réponse de MiniApp
dubois77 689 Messages postés jeudi 17 avril 2008Date d'inscription 9 mars 2018 Dernière intervention - 10 déc. 2017 à 11:23
0
Utile
1
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
tsainvet 96 Messages postés samedi 27 mars 2004Date d'inscription 14 décembre 2017 Dernière intervention - 14 déc. 2017 à 17:19
merci pour cette proposition intéressante je vais la tester merci
Commenter la réponse de dubois77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.