Je cherche une solution au problème suivant :
Un canal de transmission permet de transmettre un identifiant
numérique à 6 positions (6 caractères numériques).
En raison d'une évolution réglementaire incontournable,
l'identifiant va passer à 12 caractères numériques.
Pendant une période transitoire, on veut permettre
le fonctionnement de l'ancien canal, le temps que les
organismes concernés fassent évoluer leur système
d'information.
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Contrainte supplémentaire :
- le "hash-code" ne doit pas commencer par le
chiffre '3'.
Avez-vous des idées ?
Phil l'ancien-
bon, ça me semble etre un probleme d'informatique plus que de maths.
Je cherche une solution au problème suivant :
Un canal de transmission permet de transmettre un identifiant
numérique à 6 positions (6 caractères numériques).
En raison d'une évolution réglementaire incontournable,
l'identifiant va passer à 12 caractères numériques.
Pendant une période transitoire, on veut permettre
le fonctionnement de l'ancien canal, le temps que les
organismes concernés fassent évoluer leur système
d'information.
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Contrainte supplémentaire :
- le "hash-code" ne doit pas commencer par le
chiffre '3'.
Avez-vous des idées ?
Phil l'ancien-
bon, ça me semble etre un probleme d'informatique plus que de maths.
Je cherche une solution au problème suivant :
Un canal de transmission permet de transmettre un identifiant
numérique à 6 positions (6 caractères numériques).
En raison d'une évolution réglementaire incontournable,
l'identifiant va passer à 12 caractères numériques.
Pendant une période transitoire, on veut permettre
le fonctionnement de l'ancien canal, le temps que les
organismes concernés fassent évoluer leur système
d'information.
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Contrainte supplémentaire :
- le "hash-code" ne doit pas commencer par le
chiffre '3'.
Avez-vous des idées ?
Phil l'ancien-
bon, ça me semble etre un probleme d'informatique plus que de maths.
En résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau
de confidentialité que la clef de 6 chiffres.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
En résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau
de confidentialité que la clef de 6 chiffres.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
En résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau
de confidentialité que la clef de 6 chiffres.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
bien proposéEn résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
Oui bien vu, je me suis embrouillé
il faudrait ajouter la contrainte "pas de 3 au début".
Ah, j'avais pas vu cette contrainte là
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas
un numéro au hazard... mais ici on a plutot un logique de "numéro de
compte"
En plus du fait que sur 6 chiffres c'est difficile de vérifier. Surtout
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au
hash ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement
générer des numéros au hazard ou même en séquence.
Générer en séquence risque d'être problématique vu que ça sert de clef
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà
pris, au hazard ou en séquence.Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement
une collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
les colisions sont donc quasi certaines, a moins que tu n'ai que peu de
comptes.
bien proposé
En résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
Oui bien vu, je me suis embrouillé
il faudrait ajouter la contrainte "pas de 3 au début".
Ah, j'avais pas vu cette contrainte là
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas
un numéro au hazard... mais ici on a plutot un logique de "numéro de
compte"
En plus du fait que sur 6 chiffres c'est difficile de vérifier. Surtout
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au
hash ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement
générer des numéros au hazard ou même en séquence.
Générer en séquence risque d'être problématique vu que ça sert de clef
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà
pris, au hazard ou en séquence.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement
une collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
les colisions sont donc quasi certaines, a moins que tu n'ai que peu de
comptes.
bien proposéEn résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
Oui bien vu, je me suis embrouillé
il faudrait ajouter la contrainte "pas de 3 au début".
Ah, j'avais pas vu cette contrainte là
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas
un numéro au hazard... mais ici on a plutot un logique de "numéro de
compte"
En plus du fait que sur 6 chiffres c'est difficile de vérifier. Surtout
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au
hash ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement
générer des numéros au hazard ou même en séquence.
Générer en séquence risque d'être problématique vu que ça sert de clef
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà
pris, au hazard ou en séquence.Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement
une collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
les colisions sont donc quasi certaines, a moins que tu n'ai que peu de
comptes.
Aris a écrit
bien proposéEn résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
il faudrait ajouter la contrainte "pas de 3 au début".
on fait alors juste un modulo 9.10^5
et si >=3.10^5 on ajoute +10^5
ou alors pour les puristes
((hash(x) mod 9e5)+4e5)mod 1e6L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau de
confidentialité que la clef de 6 chiffres.
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas un
numéro au hazard... mais ici on a plutot un logique de "numéro de compte"
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au hash
ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement générer
des numéros au hazard ou même en séquence.
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après une
génération par cet algo ci, est le meme que si les nombres sont choisis
au hasard. Je ne me souviens plus de la formule du birthday paradox, mais
il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
les colisions sont donc quasi certaines, a moins que tu n'ai que
peu de comptes.
Aris a écrit
bien proposé
En résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
il faudrait ajouter la contrainte "pas de 3 au début".
on fait alors juste un modulo 9.10^5
et si >=3.10^5 on ajoute +10^5
ou alors pour les puristes
((hash(x) mod 9e5)+4e5)mod 1e6
L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau de
confidentialité que la clef de 6 chiffres.
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas un
numéro au hazard... mais ici on a plutot un logique de "numéro de compte"
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au hash
ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement générer
des numéros au hazard ou même en séquence.
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après une
génération par cet algo ci, est le meme que si les nombres sont choisis
au hasard. Je ne me souviens plus de la formule du birthday paradox, mais
il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
les colisions sont donc quasi certaines, a moins que tu n'ai que
peu de comptes.
Aris a écrit
bien proposéEn résumé, la formule serait (md5(code de 12 chiffres) & 2^64-1) mod 10^7
1er détail, 6 chiffre ca doit faire 10^6 possibilités
il faudrait ajouter la contrainte "pas de 3 au début".
on fait alors juste un modulo 9.10^5
et si >=3.10^5 on ajoute +10^5
ou alors pour les puristes
((hash(x) mod 9e5)+4e5)mod 1e6L'important n'étant pas vraiment la manière de recuperer les chiffres du
hash, mais d'utiliser la meme formule partout !
Je ne pense pas qu'il soit critique de cacher la formule et d'inclure un
HMAC (hash authentifié) vu que la clef de 12 chiffres a le meme niveau de
confidentialité que la clef de 6 chiffres.
le hash authentifié permettrait de vérifier qu'un tiers ne produit pas un
numéro au hazard... mais ici on a plutot un logique de "numéro de compte"
un problème c'est que ce n'est pas réversible. il faut donc garder une
table inverse, ou sinon tester toutes les possibilités jusqu'a ce que ca
marche.
une autre solution c'est la table de correspondance. c'est un peu au hash
ce que la one-time-pad est au chiffrement.
vu qu'on a besoin de toute facon d'une table de conversion inverse,
pourquoi ne pas l'utiliser pour la traduction, et puis finalement générer
des numéros au hazard ou même en séquence.
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après une
génération par cet algo ci, est le meme que si les nombres sont choisis
au hasard. Je ne me souviens plus de la formule du birthday paradox, mais
il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
les colisions sont donc quasi certaines, a moins que tu n'ai que
peu de comptes.
Al
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
1/2 lorsqu'il y a sqrt(n) échantillons. Donc la proba qu'il existe une
collision si il y a 1000 utilisateurs est de 1/2. Totalement inacceptable
en effet.
les colisions sont donc quasi certaines, a moins
que tu n'ai que peu de comptes.
Al
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.
Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
1/2 lorsqu'il y a sqrt(n) échantillons. Donc la proba qu'il existe une
collision si il y a 1000 utilisateurs est de 1/2. Totalement inacceptable
en effet.
les colisions sont donc quasi certaines, a moins
que tu n'ai que peu de comptes.
Al
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
pour chaque numéro à 12 chiffres, tu affecte un numéro à 6 pas déjà pris,
au hazard ou en séquence.Le risque d'avoir une collision dans les 10^7 premiers nombres, après
une génération par cet algo ci, est le meme que si les nombres sont
choisis au hasard. Je ne me souviens plus de la formule du birthday
paradox, mais il suffit de chercher un peu pour la trouver
je crois que c'est la racine carrée du nombre de possibilités.
ca ferait que dès qu'il y a plus de 950 "comptes" il y a probablement une
collision.
Je viens de me rappeler la regle. La probabilité d'une collision est de
1/2 lorsqu'il y a sqrt(n) échantillons. Donc la proba qu'il existe une
collision si il y a 1000 utilisateurs est de 1/2. Totalement inacceptable
en effet.
les colisions sont donc quasi certaines, a moins
que tu n'ai que peu de comptes.
ArisAl
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
Ca ne sert pas d'identification secrète, c'est un identifiant
de produit.
Si il y a une collision, ça provoquera une erreur
et une régularisation par papier, téléphonique, etc.
Disons que la série 100.000.000.000 - 100.000.000.100
est constituée de voitures bleues qui coutent exactement 15.321 euros.
...
Aris
Al
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
Ca ne sert pas d'identification secrète, c'est un identifiant
de produit.
Si il y a une collision, ça provoquera une erreur
et une régularisation par papier, téléphonique, etc.
Disons que la série 100.000.000.000 - 100.000.000.100
est constituée de voitures bleues qui coutent exactement 15.321 euros.
...
ArisAl
Générer en séquence risque d'être problématique vu que ça sert de clef
d'identification secrète. Mais conserver une table et générer des numéros
au hasard est la seule solution pour empêcher une collision
Ca ne sert pas d'identification secrète, c'est un identifiant
de produit.
Si il y a une collision, ça provoquera une erreur
et une régularisation par papier, téléphonique, etc.
Disons que la série 100.000.000.000 - 100.000.000.100
est constituée de voitures bleues qui coutent exactement 15.321 euros.
...
Phil l'ancien
une question bête
pourquoi ne pas adopter une compatibilité ascendante
en gros
si je reçois 6 chiffres
j'effectue une recherche pour caractériser la commande
et à partir de la définition je génère les 12 chiffres
que j'envoie dans les tuyaux à 12 chiffres
si je reçois 12 chiffres je ne fais rien
le problème c'est quand je veux commander un nouveau produit
qui n'a pas de code en 6 chiffres ou que les 6 chiffres ne permettent
pas de caractériser un produit unique cela implique un repli vers le
téléphone en gros
Phil l'ancien
une question bête
pourquoi ne pas adopter une compatibilité ascendante
en gros
si je reçois 6 chiffres
j'effectue une recherche pour caractériser la commande
et à partir de la définition je génère les 12 chiffres
que j'envoie dans les tuyaux à 12 chiffres
si je reçois 12 chiffres je ne fais rien
le problème c'est quand je veux commander un nouveau produit
qui n'a pas de code en 6 chiffres ou que les 6 chiffres ne permettent
pas de caractériser un produit unique cela implique un repli vers le
téléphone en gros
Phil l'ancien
une question bête
pourquoi ne pas adopter une compatibilité ascendante
en gros
si je reçois 6 chiffres
j'effectue une recherche pour caractériser la commande
et à partir de la définition je génère les 12 chiffres
que j'envoie dans les tuyaux à 12 chiffres
si je reçois 12 chiffres je ne fais rien
le problème c'est quand je veux commander un nouveau produit
qui n'a pas de code en 6 chiffres ou que les 6 chiffres ne permettent
pas de caractériser un produit unique cela implique un repli vers le
téléphone en gros
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Mmouais... question: est il possible d'évaluer l'histogramme de cette
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Mmouais... question: est il possible d'évaluer l'histogramme de cette
Autrement dit : on veut produire l'équivalent d'un hash-code
sur 6 chiffres d'une information sur 12 chiffres,
avec le moins de collisions possibles.
Pour des raisons d'équité, il faut que les collisions
soient bien réparties (et non pas concentrées sur
certains intervalles de la valeur sur 12).
Mmouais... question: est il possible d'évaluer l'histogramme de cette