> Le 14 déc. 2019 à 22:14, Jérôme Amagat <jerome.ama...@gmail.com> a écrit :
>
> Si on a un code sur 11 caractères : XXXXXXYZZZ (ici ça en fait 10 mais il
> manque la clé a la fin)
> il faut faire ( XXXXXX * 19 + Y * 11 + ZZZ ) modulo 23 avec pour Y si c'est
> une lettre il faut la changé en 10 pour A, 11 pour B ....
> Et le résultat on le change en lettre avec A pour 0, B pour 1 ... en sautant
> I,O et Q
Pour que ça soit plus clair, il faut faire les remplacements sous forme de
chaine de caractères, puis transformer ça en nombre pour faire le calcul.
Un exemple : ref:FR:FANTOIR=2B050B332M
« 2B050 » devient « 211050 » (« B » devient « 11 »)
on insère le code div = 0,
ça devient « 2110050 »
« B » devient « 11 »
« 332 » reste inchangé
La valeur de contrôle est :
(2110050 * 19 + 11 * 11 + 332) mod 23
40091403 mod 23
11
soit la lettre « M »
La formule pour OpenRefine est :
["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"].get(
mod(
(value.substring(0,2) + "0" +
value.substring(2,5).replace("A","10")).replace("B","11").toNumber() * 19 +
indexOf("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",value.substring(5,6)) * 11 +
value.substring(6,9).toNumber()
,23)
)
avec une valeur découpée pour exemple
2B 050 B 332 M
01 234 5 678 9
J’ai fait un essai sur environ 500 rues des départements 39, 2A et 2B : ça
fonctionne (dir=0).
En mettant des valeurs de dir à 1, 2… la clé calculée est différente 😉
Avez-vous des communes avec dir ≠ 0 ?
—
Yves
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr