> 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

Répondre à