Skip to content

Instantly share code, notes, and snippets.

@bohwaz
Last active January 10, 2024 10:41
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • 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;
}
@LaurentSGL
Copy link

Je pense qu'il y a une erreur dans le code :le 'V' semble manquant
// 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','W', 'X', 'Y', 'Z']);
$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']);

@bohwaz
Copy link
Author

bohwaz commented Jun 12, 2019

Corrigé, merci !

@Iseldore
Copy link

Iseldore commented Jul 5, 2019

Renvoie true si on passe "00000000000", une idée pour renforcer le contrôle ?

@bohwaz
Copy link
Author

bohwaz commented Jul 5, 2019

Renvoie true si on passe "00000000000", une idée pour renforcer le contrôle ?

C'est un numéro valide selon la vérification Scolarix… Je me renseigne pour voir si j'arrive à obtenir des spécifications plus précises, mais pas sûr qu'il y en ait…

@bohwaz
Copy link
Author

bohwaz commented Jul 8, 2019

Renvoie true si on passe "00000000000", une idée pour renforcer le contrôle ?

Après vérification je confirme que c'est bien un numéro valide selon Scolarix, et qu'il peut être utilisé, malgré les apparences.

@Nyroldiin
Copy link

Bonjour

Savez vous comment calculer les nouveaux INE avec 2 modulo ?

@bohwaz
Copy link
Author

bohwaz commented Sep 8, 2020

Bonjour

Savez vous comment calculer les nouveaux INE avec 2 modulo ?

Hello, je ne travaille plus dans le milieu donc je ne peux pas aider désolé.

@gweltoch
Copy link

Bonjour
Les nouveaux INE ont aussi 11 caractères :

1er et 2ème : Année de codification de l'élève (le plus souvent année d'entrée en maternelle ou "15" ou plus pour les élèves du second degré scolarisés à partir de 2015-2016 qui n'avaient pas d'INE du 1er degré).

3ème à 9ème : numéro d’ordre

10ème et 11ème : 2 lettres de clé de contrôle

La clé est calculée à partir du modulo 97 du nombre formé par les 9 premiers caractères :
KH si multiple de 97 (reste =0)
KG si reste =1
etc... en utilisant 10 lettres de A à K (sauf i ), de AB à KH en ordre inversé.
...
KA si reste=7
JK si reste=8
JJ si reste=9
JH si reste=10
...
JA si reste=17
...
HA si reste=27
...
AC si reste =95
AB si reste=96

@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