Il est possible d'utiliser le code Java suivant pour vérifier le code RIO :
private
static
boolean
is_RIO(String rio, String sMsisdn)
{
if
(rio.length() != 12)
return
false;
if
(!sMsisdn.matches("0\\d{9,9}"))
throw
new
IllegalArgumentException(
"Le
numéro de téléphone (msisdn) doit être au format 0612345678");
String
sRio = rio.toUpperCase();
String
operateur = sRio.substring(0, 2);
String
typeContrat = sRio.substring(2, 3);
String
refClient = sRio.substring(3, 9);
if
(!typeContrat.equals("P")
&& !typeContrat.equals("E"))
return
false;
String
sOrdre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+";
int[]
nRes = { 0, 0, 0 };
String
sTmp = operateur + typeContrat + refClient + sMsisdn;
for
(int
n = 0; n < 19; n++) {
int
nPos = sOrdre.indexOf(sTmp.substring(n, n + 1));
nRes[0]=
(nRes[0] + nPos) % 37;
nRes[1] =
((2 * nRes[1]) + nPos) % 37;
nRes[2] =
((4 * nRes[2]) + nPos) % 37;
}
String
sCleCalculee = sOrdre.substring(nRes[0], nRes[0] + 1) +
sOrdre.substring(nRes[1],
nRes[1] + 1) + sOrdre.substring(nRes[2],
nRes[2] + 1);
return
sRio.substring(9).equals(sCleCalculee);
}
La même possibilité est offerte avec le code PHP
Tag - code
mercredi 29 juin 2011
Code PHP pour vérifier code RIO
Par victorix le mercredi 29 juin 2011, 13:24
Afin de vérifier le code de contrôle d'un RIO, il est possible d'utiliser le code PHP suivant (envoi depuis un formulaire du code RIO et du numéro de téléphone mobile en méthode POST) :
<?php
$rio = $_POST["coderio"];
$mobile = $_POST["mobile"];
if ($rio == "" or $mobile == "") echo "Un des champs est vide";
else if (strlen($rio) != 12) echo "Le code RIO doit contenir 12 caractères exactement";
else {
$rio = strtoupper($rio);
$operateur = substr($rio, 0, 2);
$typecontrat = substr($rio, 2, 1);
$refclient = substr($rio, 3, 6);
if ($typecontrat != "P" && $typecontrat != "E") echo "Le code RIO est erroné, l'identification du contrat est faux";
$ordre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+";
$res = array(0, 0, 0);
$tmp = $operateur . $typecontrat . $refclient . $mobile;
for ($n = 0;$n < 19;$n++) {
$pos = strpos($ordre, substr($tmp, $n, 1));
$res[0] = ($res[0] + $pos) % 37;
$res[1] = ((2 * $res[1]) + $pos) % 37;
$res[2] = ((4 * $res[2]) + $pos) % 37;
}
$clecalculee = substr($ordre, $res[0], 1) . substr($ordre, $res[1], 1) . substr($ordre, $res[2], 1);
if (substr($rio, 9) != $clecalculee) echo "Le code RIO est erroné";
else echo "<em>!!! Le code RIO est BON !!!</em>";
}
?>