Skip to content

Instantly share code, notes, and snippets.

@bohwaz
Last active January 10, 2024 10:41
Show Gist options
  • Save bohwaz/e14df1e88e9e06aa3857e8b6f1181bf9 to your computer and use it in GitHub Desktop.
Save bohwaz/e14df1e88e9e06aa3857e8b6f1181bf9 to your computer and use it in GitHub Desktop.
Vérification de validité de numéro INE d'étudiant (BEA/Scolarix/APOGEE)
<?php
// Licence : domaine public ou WTFPL
// 2018 BohwaZ <http://bohwaz.net/>
function check_ine($ine)
{
if (!function_exists('bcmod'))
{
throw new \LogicException('bcmath is required');
}
$ine = strtoupper(trim($ine));
if (strlen($ine) != 11)
{
return false;
}
// Numéro INE/BEA
// format AABBNNNNNNM
// AA = Académie, BB = Année, NNNNNN = Numéro (préfixé par D si provisoire), M = modulo 23
if (preg_match('!^(\d\d)(\d\d)([A-Z\d]{6})([A-Z])$!', $ine, $match))
{
list(, $academie, $annee, $numero, $modulo) = $match;
// Numéro INE provisoire
$provisoire = substr($numero, 0, 1) == 'D';
// Académie 00 (international) n'accepte pas de numéro provisoire
if ($academie == '00' && $provisoire)
{
return false;
}
// Liste des académies
// 00 International
// 01-28 Paris-Réunion
// 31-33, 41-44 DOM-TOM
// 80 INAA
static $liste_academies = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09',
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
31, 32, 33, 40, 41, 42, 43, 44, 50, 51, 59, 80, 99];
if (!in_array($academie, $liste_academies))
{
return false;
}
// Année >= 90 OU Année <= (Année courante sur 2 chiffres)
if ($annee < 90 && $annee > date('y'))
{
return false;
}
// Lettres I, O et Q ne sont pas utilisées
$lettres = array_flip(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', /*'I', */
'J', 'K', 'L', 'M', 'N', /*'O'*/ 'P', /*'Q'*/ 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z']);
// Remplacement
$numero = strtr($numero, $lettres);
$modulo = $lettres[$modulo];
$check = bcmod($academie . $annee . $numero, 23);
if ($check == $modulo)
{
return true;
}
}
// Numéro INE établissement enseignement supérieur
// (Cocktail/Scolarix/APOGEE)
// AAAAABCCCCM
// AAAAA = code établissement base 36 (code UAI)
// B = numéro année base 36
// CCCC = numéro d'ordre étudiant base 36
// M = modulo 10 base 10
if (preg_match('!^[A-Z\d]{10}\d$!', $ine, $match))
{
//$etablissement = base_convert(substr($ine, 0, 5), 36, 10);
//$annee = 1990 + base_convert(substr($ine, 5, 1), 36, 10);
//$numero = base_convert(substr($ine, 6, 4), 36, 10);
$modulo = substr($ine, -1);
$ine = base_convert(substr($ine, 0, 10), 36, 10);
$check = bcmod($ine, 10);
if ($modulo == $check)
{
return true;
}
}
return false;
}
@Tsar2TLR
Copy link

Bonjour,
Vous auriez, s'il vous plaît, un document du ministère ou d'une académie qui explique le détail du formatage ? ou le sauriez-vous vous même?
les 7 caractères du milieu, c'est juste un nombre qui s'incrémente et qui couvre toute la France ? plus de découpage par académie ?
Vous êtes sûr du calcul modulo 97 ?
Nous sommes d'accord que ça ne cadre pas avec l'algorithme de @bohwaz , qui pourtant, traite bien dans sa première partie des INE avec deux caractères en fin de chaîne ?
Merci de vos réponses !

@jfrancezon
Copy link

Bonjour,
Il ne faut pas confondre numéro RNIE et numéro INE (BEA) :

Numéros RNIE

Le format RNIE (9 entiers suivis de 2 lettres) :

  • Les deux premiers caractères sont les deux derniers chiffres de l'année d'immatriculation : doit être un nombre supérieur ou égal à 18 (année des premières immatriculations) et inférieur ou égal à l'année en cours
  • Les sept caractères suivants doivent être entiers ;
  • Les deux caractères suivants doivent être des caractères alphabétiques.

Numéros INE (Etablissement d'enseignement supérieur)

Le n° INE ("Identifiant National d'Etudiant") ou BEA (Base élèves académique), codé sur 11 caractères et dont la structure est stricte :
Chaque numéro est composé de 11 caractères, répartis ainsi :

  • 10 caractères pour le "matricule de l'étudiant" :
  • 5 caractères : code "UAI" de l'établissement (7 caractères numériques ; on ne prend pas en compte la clé alphanumérique) converti en base 36 ;
  • 1 caractère : un n° de série, représenté par une lettre variant chaque année scolaire (par exemple : la lettre K pour l’année scolaire 2010-2011) ; ces 6 premiers caractères sont la "clé de l'établissement" dans le n° INE ;
  • 4 caractères : un n° d'ordre pour l'apprenant, calculé en base 10, puis exprimé en base 36 et formaté sur 4 caractères, avec des 0 à gauche ;
  • 1 caractère qui sert de clé de contrôle : le chiffre des unités du matricule qui vient d'être calculé, retranscrit en base 10.
    Cette clé est toujours égale au chiffre de l'unité de la somme "Clé de l'établissement" retranscrit en base 10 + le n° d'ordre de l'apprenant resté en base 10 (donc avant sa transformation ci-dessus en base 36).

Un service ministérielle permet de vérifier le n° INE : https://ines.enseignementsup-recherche.gouv.fr
Uniquement accessible sur login / mot de passe.

Copy link

ghost commented Mar 30, 2023

Bonjour, désolé de vous déranger !
Je souhaite savoir si ils existent des documents qui expliquent le formatage des nouveaux INE ?
Après avoir recherché scrupuleusement dans de dizaines de pages de recherche sur Google, je ne trouve malheusement rien.
J'espère que l'un d'entre nous pourra nous éclaircir sur les INE..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment