Ce document présente une bibliothèque de types, d'éléments et d'attributs XML permettant de représenter les données d'identification NIR et NIR_Avec_Clé.
La définition formelle de cette bibliothèque est réalisée sous la forme d'un schéma W3C XML Schema.
NIR et NIR_Avec_Clé constituent un système d'identification des personnes physiques.
Les types, éléments et attributs décrits décrit dans ce module font partie de l'espace de noms INSEE : http://xml.insee.fr/schema/2004
Cette documentation et les ressources qui en dépendent (schémas, exemples, transformations XSLT) sont soumises aux conditions d'utilisation des informations publiées sur le site de l'INSEE.
Le NIR est un numéro à treize caractères dont la composition est précisée dans l'article 4 du décret n° 82-103 du 22 janvier 1982 : "Le numéro attribué à chaque personne inscrite au répertoire comporte 13 chiffres. Ce numéro indique successivement et exclusivement le sexe (1 chiffre), l'année de naissance (2 chiffres), le mois de naissance (2 chiffres), et le lieu de naissance (5 chiffres ou caractères) de la personne concernée. Les trois chiffres suivants permettent de distinguer les personnes nées au même lieu, à la même période."
On notera également l'article 6 du décret n° 82-103 du 22 janvier 1982 relatif au répertoire national d'identification des personnes physiques (RNIPP), "le numéro d'inscription au répertoire d'une personne n'est modifié que dans le cas où les informations qu'il décrit ne sont pas, ou ne sont plus, conformes aux registres de l'état civil".
Les éléments constitutifs du NIR ont été valués de la manière suivante :
Compte tenu des aménagements décrits plus haut et de ceux qui pourraient survenir dans le futur, il est conseillé aux applications informatiques de ne pas s'appuyer sur la structure du NIR pour en déduire les caractéristiques des personnes mais de le considérer comme un identifiant "opaque".
L'utilisation du NIR dans les applications informatiques est soumise à de fortes contraintes juridiques, dont (la liste n'étant pas exhaustive) :
La définition d'un numéro NIR sous forme d'un type simple est la suivante:
§1.
<xs:simpleType name="NIR_stype"> <xs:restriction base="ie:Chaîne_Numérique_et_ASCII_Majuscule_stype"> <xs:length value="13"/> <xs:pattern value="[0-9]{6}[0-9AB][0-9]{6}"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros NIR, par exemple:
§2.
<xs:element name="mon-element-NIR" type="ie:NIR_stype"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§3.
<ex:mon-element-NIR>1510246102043</ex:mon-element-NIR>
La définition de l'élément NIR est la suivante:
§4.
<xs:element name="NIR" type="ie:NIR_stype"/>
Les éléments NIR peuvent être utilisés directement dans des documents XML, par exemple:
§5.
<ex:personne> <ie:NIR>278112B050002</ie:NIR> <ex:nom>X</ex:nom> </ex:personne>
La définition de l'attribut NIR est la suivante:
§6.
<xs:attribute name="NIR" type="ie:NIR_stype"/>
Les attributs NIR peuvent être utilisés directement dans des documents XML, par exemple:
§7.
<ex:personne ie:NIR="1111111111111"> <ex:nom>X</ex:nom> </ex:personne>
La clé de contrôle du NIR est un nombre à deux chiffres dont la valeur est le complément à 97 du reste de la division du nombre formé par le NIR par 97. Cette formule a été adaptée aux numéros de départements alphabétiques (2A et 2B) de la manière suivante :
Définition d'une clé de contrôle du NIR sous forme d'un type simple:
§8.
<xs:simpleType name="Clé_NIR_stype"> <xs:restriction base="ie:Chaîne_Numérique_stype"> <xs:length value="2"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des clés de contrôle, par exemple:
§9.
<xs:element name="mon-element-Clé_NIR" type="ie:Clé_NIR_stype"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§10.
<ex:mon-element-Clé_NIR>11</ex:mon-element-Clé_NIR>
La définition de l'élément Clé_NIR est la suivante:
§11.
<xs:element name="Clé_NIR" type="ie:Clé_NIR_stype"/>
Les éléments Clé_NIR peuvent être utilisés directement dans des documents XML, par exemple:
§12.
<ex:personne> <ie:NIR>1510246102043</ie:NIR> <ie:Clé_NIR>25</ie:Clé_NIR> <ex:nom>...</ex:nom> </ex:personne>
La définition de l'attribut Clé_NIR est la suivante:
§13.
<xs:attribute name="Clé_NIR" type="ie:Clé_NIR_stype"/>
Les attributs Clé_NIR peuvent être utilisés directement dans des documents XML, par exemple:
§14.
<ex:personne ie:Clé_NIR="86" ie:NIR="278112B050002"> <ex:nom>...</ex:nom> </ex:personne>
Un numéro NIR_Avec_Clé est constitué d'un NIR et d'une Clé_NIR et on pourra utiliser ce type complexe lorsqu'on souhaitera isoler ces deux composantes dans deux éléments séparés :
§15.
<xs:complexType name="NIR_Avec_Clé_ctype"> <xs:sequence> <xs:element ref="ie:NIR"/> <xs:element ref="ie:Clé_NIR"/> </xs:sequence> </xs:complexType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros NIR_Avec_Clé, par exemple:
§16.
<xs:element name="mon-element-NIR_Avec_Clé" type="ie:NIR_Avec_Clé_ctype"/>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§17.
<ex:mon-element-NIR_Avec_Clé> <ie:NIR>1111111111111</ie:NIR> <ie:Clé_NIR>20</ie:Clé_NIR> </ex:mon-element-NIR_Avec_Clé>
On notera que l'utilisation de ce type complexe impose l'utilisation de l'espace de noms INSEE dans les documents XML.
La définition de l'élément NIR_Avec_Clé est la suivante:
§18.
<xs:element name="NIR_Avec_Clé" type="ie:NIR_Avec_Clé_ctype"/>
Les éléments NIR_Avec_Clé peuvent être utilisés directement dans des documents XML, par exemple:
§19.
<ex:personne> <ie:NIR_Avec_Clé> <ie:NIR>1510246102043</ie:NIR> <ie:Clé_NIR>25</ie:Clé_NIR> </ie:NIR_Avec_Clé> <ex:nom>...</ex:nom> </ex:personne>
Lorsqu'il n'est pas possible de séparer NIR et Clé_NIR en deux sous éléments (notamment lorsque le numéro NIR_Avec_Clé est codé sous forme d'attribut ou lorsqu'il n'est pas possible d'insérer des éléments appartenant à l'espace de noms INSEE dans les documents XML), on pourra concaténer ces deux identifiants et utiliser le type simple suivant:
§20.
<xs:simpleType name="NIR_Avec_Clé_stype"> <xs:restriction base="ie:Chaîne_Numérique_et_ASCII_Majuscule_stype"> <xs:length value="15"/> <xs:pattern value="[0-9]{6}[0-9AB][0-9]{8}"/> </xs:restriction> </xs:simpleType>
Ce type peut être affecté dans un schéma pour définir des éléments ou attributs contenant des numéros NIR_Avec_Clé, par exemple:
§21.
<xs:element name="personne"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:token"/> </xs:sequence> <xs:attribute name="mon-attribut-NIR_Avec_Clé" type="ie:NIR_Avec_Clé_stype"/> </xs:complexType> </xs:element>
Les éléments ou attributs ainsi définis peuvent ensuite être utilisés dans des documents XML, par exemple :
§22.
<ex:personne mon-attribut-NIR_Avec_Clé="278112B05000286"> <ex:nom>...</ex:nom> </ex:personne>
La définition de l'attribut NIR_Avec_Clé est basée sur ce type simple:
§23.
<xs:attribute name="NIR_Avec_Clé" type="ie:NIR_Avec_Clé_stype"/>
Les attributs NIR_Avec_Clé peuvent être utilisés directement dans des documents XML, par exemple:
§24.
<ex:personne ie:NIR_Avec_Clé="111111111111120"> <ex:nom>....</ex:nom> </ex:personne>
L'utilisation des éléments et attributs définis dans ce schéma permet de se baser directement sur leur nom (et espace de nom) pour les identifier et les valider.
L'utilisation des types simples définis dans ce schéma permet au contraire d'utiliser des noms d'attributs et d'éléments quelconques (et appartenant à des espaces de noms quelconques).
L'attribution de types à ces éléments et attributs permet de les valider en suivant les définitions de ce schéma.
Ces attributions sont également transmises aux applications supportant W3C XML Schema et son "Post Schema Validation Infoset" (PSVI) qui peuvent reconnaître qu'il s'agit des données d'identification définies par ce schéma.
L'utilisation de types complexes se situe à un niveau intermédiaire puisqu'elle permet d'utiliser des noms et espaces de noms quelconques pour les éléments racines de ces types de données mais qu'elle impose l'utilisation des éléments (et de l'espace de noms) définis par ce schéma pour les éléments inclus dans le type de données (voir exemple concernant le type NIR_Avec_Clé_ctype).
Si l'utilisation individuelle de numéros NIR et Clé_NIR pour former un numéro NIR_Avec_Clé est techniquement correcte, elle présente l'inconvénient pour les applications de ne pas lier ces deux informations de manière explicite dans un schéma. Les applications ne peuvent donc pas trouver dans le seul schéma le lien permettant de constituer un numéro NIR_Avec_Clé identifiant une personne à partir de ces deux informations isolées et doit se reposer sur des conventions définies de manière informelle ci-dessous.
L'utilisation des éléments, attributs et types NIR_Avec_Clé qui évite ce problème est recommandée pour identifier une personne physique.
Lorsqu'ils ne peuvent pas utiliser des éléments, attributs ou types NIR_Avec_Clé, les vocabulaires XML souhaitant utiliser de manière individuelle les numéros NIR et Clé_NIR sont invités à respecter les règles suivantes :
Les numéros NIR_Avec_Clé intègrent un mécanisme de contrôle de parité puisque, par définition, la Clé_NIR représente le complément à 97 du reste de la division par 97 du nombre déduit du numéro NIR.
Le contrôle de la clé du NIR peut être implémenté en XSLT de la manière suivante :
§25.
<xsl:template name="controle_clé_nir"> <xsl:param name="NIR" select="substring(., 1, 13)"/> <xsl:param name="clé" select="substring(., 14, 2)"/> <xsl:variable name="NIR-ajusté"> <xsl:choose> <xsl:when test="contains($NIR, 'A')"> <xsl:value-of select="number(translate($NIR, 'A', '0')) - 1000000"/> </xsl:when> <xsl:when test="contains($NIR, 'B')"> <xsl:value-of select="number(translate($NIR, 'B', '0')) - 2000000"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$NIR"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name="clé_calculée" select="97 - ($NIR-ajusté mod 97)"/> <xsl:choose> <xsl:when test="$clé = $clé_calculée"> <xsl:text> Correct</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text> Erreur, la clé devrait être : </xsl:text> <xsl:value-of select="$clé_calculée"/> <xsl:text> (et non </xsl:text> <xsl:value-of select="$clé"/> <xsl:text>). </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template>
Les documents suivants sont disponibles pour téléchargement.
[Document]
§26.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ie="http://xml.insee.fr/schema/2004" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xml.insee.fr/schema/2004" version="1.0"> <xs:include schemaLocation="insee-commun.xsd"/> §1.Type NIR_stype §4.Élément NIR §6.Attribut NIR §8.Type Clé_NIR_stype §11.Élément Clé_NIR §13.Attribut Clé_NIR §15.Type NIR_Avec_Clé_ctype §18.Élément NIR_Avec_Clé §20.Type NIR_Avec_Clé_stype §23.Attribut NIR_Avec_Clé </xs:schema>
[Document]
§27.
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ie="http://xml.insee.fr/schema/2004" version="1.0"> <xsl:output method="text"/> <xsl:template match="*|@*"> <xsl:apply-templates select="*|@*"/> </xsl:template> <xsl:template match="*[ie:NIR and ie:Clé_NIR]"> <xsl:text> Contrôle NIR_Avec_Clé, élément </xsl:text> <xsl:value-of select="name()"/> <xsl:call-template name="controle_clé_nir"> <xsl:with-param name="NIR" select="ie:NIR"/> <xsl:with-param name="clé" select="ie:Clé_NIR"/> </xsl:call-template> <xsl:text/> </xsl:template> <xsl:template match="*[@ie:NIR and @ie:Clé_NIR]"> <xsl:text> Contrôle NIR_Avec_Clé, élément </xsl:text> <xsl:value-of select="name()"/> <xsl:call-template name="controle_clé_nir"> <xsl:with-param name="NIR" select="@ie:NIR"/> <xsl:with-param name="clé" select="@ie:Clé_NIR"/> </xsl:call-template> <xsl:text/> </xsl:template> <xsl:template match="@ie:NIR_Avec_Clé"> <xsl:text> Contrôle NIR_Avec_Clé, élément </xsl:text> <xsl:value-of select="name()"/> <xsl:call-template name="controle_clé_nir"/> <xsl:text/> </xsl:template> §25.Implémentation XSLT </xsl:transform>
Schéma validant les exemples utilisant les définitions de types simples et complexes :
[Document]
§28.
<xs:schema xmlns:ex="http://dyomedea.com/ns/example" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ie="http://xml.insee.fr/schema/2004" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://dyomedea.com/ns/example" version="1.0"> <xs:import namespace="http://xml.insee.fr/schema/2004" schemaLocation="nir.xsd"/> §2.Type NIR_stype §9.Type Clé_NIR_stype §16.Type NIR_Avec_Clé_ctype §21.Type NIR_Avec_Clé_stype <xs:element name="exemples"> <xs:complexType> <xs:sequence> <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##targetNamespace" processContents="strict"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Document XML regroupant les exemples utilisant les définitions de types simples et complexes :
[Document]
§29.
<ex:exemples xmlns:ex="http://dyomedea.com/ns/example" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dyomedea.com/ns/example exemples-nir-types.xsd"> §3.Type NIR_stype §10.Type Clé_NIR_stype §17.Type NIR_Avec_Clé_ctype §22.Type NIR_Avec_Clé_stype </ex:exemples>
Document XML regroupant les exemples utilisant les éléments et attributs :
[Document]
§30.
<ex:exemples xmlns:ex="http://dyomedea.com/ns/example" xmlns:ie="http://xml.insee.fr/schema/2004"> §5.Élément NIR §7.Attribut NIR §12.Élément Clé_NIR §14.Attribut Clé_NIR §19.Élément NIR_Avec_Clé §24.Attribut NIR_Avec_Clé </ex:exemples>
Les documents et sites de référence suivants ont été utilisés pour la constitution de ce vocabulaire XML.
Le Décret n° 82-103 du 22 janvier 1982 relatif au répertoire national d'identification des personnes physiques confirme la mission de l'INSEE concernant le répertoire national d'identification des personnes physiques et en précise certaines modalités.
Publié sur le site de l'INSEE, cet article donne un aperçu de la composition, de l'historique et de l'utilisation du NIR.
Les ressources suivantes sont définies ou référencées dans ce document :