Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Personnummer

Skatteverket publicerar en skrift SKV 704 (upplaga 8 är senaste i skrivande stund) som beskriver hur personnummret är uppbyggt. I avsnittet "Personnummer i ADB-system" står följande:

...

SWAMID rekommenderar att man följer denna princip för personnummer som skickas via attributet norEduPersonNIN, d.v.s. att personnummer representeras som 12 siffror tecken utan bindestreck eller mellanslag. För Shibboleth IdP finns norEduPersonNIN definerat på sidan Example of a standard attribute resolver for Shibboleth IdP v4 and above.

Samordningsnummer

Skatteverket publicerar en skrift SKV 707 (upplaga 2 är senaste i skrivande stund) som beskriver vad samordningsnummer är. I inledningen definieras skillnanden mellan samordningsnummer och personnummer enligt:

...

Universitet och högskolor får inte begära samordningsnummer från Skatteverket men om en person har ett samordningsnummer ska vi använda det. Det som särskiljer ett samordningsnummer från ett vanligt personnummer är att siffran för födelsedag ökas med talet 60, dvs. den som är född den tredje i månaden har 63 istället för 03.

Interimspersonnummer i Ladok och

...

antagningssystemet

Ett interimspersonnummer i Ladok är konstruerat som ÅÅÅÅMMDDXnnn, d.v.s. med en versal bokstav i den 9:e positionen samt en könsvariabel i den 11:e positionen. Bokstaven behandlas som en etta vid uträkning av kontrollsiffran i position 12. Traditionellt har s.k. P-nummer används lokalt i Ladok men efter införandet av VHS UHR:s antagningssystem har s.k. T-nummer används nationellt.

...

Efter ’T’ ska ’R’ användas till dess samtliga tillgängliga interimspersonnummer med den bokstaven är slut för det aktuella datumet. Därefter används ’S’, osv.

Konfiguration för Shibboleth

Info

Konfigurationerna under detta avsnitt fungerar endast för Shibboleth 2 3.4 eller senare. För simpleSAMLphp och ADFS kan konfigurationsexemplen endast användas som inspiration.

Hur gör man om man har personnumret i 12 tecken men inte i ett LDAP-

...

attribut?

Förutsättning:

  • Personnummer hämtas via attributet mittPersonnummer från källan myLDAP.


Code Block

...

    <AttributeDefinition xsi:type="Simple" 

...

id="

...

norEduPersonNIN">
   

...

     <InputDataConnector ref="myLDAP" attributeNames="mittPersonnummer"/>

...

  

...

      <AttributeEncoder xsi:type="SAML1String"

...

 name="urn:mace:

...

dir:

...

attribute-def:

...

norEduPersonNIN"

...

 encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:

...

oid:1.3.6.1.4.1.2428.90.1.5" friendlyName="norEduPersonNIN" encodeType="false" />
    </AttributeDefinition>


Hur gör man om man har personnumret i 10 tecken och inte i LDAP-attributet norEduPersonNIN?

Förutsättningar:

  • Personnummer hämtas via attributet employeeNumber från källan myLDAP, anpassa efter behov.
  • Personnumret kan vara både 10 och 12 tecken.
  • Använder "sliding windows" utan offset för att dynamiskt hantera 2000-problemet.
Code Block
<AttributeDefinition  xsi:type="ScriptedAttribute" id="norEduPersonNIN">
        

...

<InputDataConnector ref="myLDAP" attributeNames="employeeNumber" />
        <Script>
        <

...

Hur gör man om man har personnumret i 10 tecken och inte i LDAP-attributet norEduPersonNIN?

Förutsättningar:

  • Personnummer hämtas via attributet employeeNumber från källan myLDAP, anpassa efter behov.
  • Personnumret kan vara både 10 och 12 siffror.
  • Använder "sliding windows" utan offset för att dynamiskt hantera 2000-problemet.
Code Block
<resolver:AttributeDefinition id="norEduPersonNIN" xsi:type="Script" xmlns="urn:mace:shibboleth:2.0:resolver:ad">![CDATA[
        // Script to handle 10 position wide national identity numbers
        // Create 12 position wide norEduPersonNIN from the attribute employeeNumber
        // Change employeeNumber to your NIN attribute name
        <resolver:Dependency ref="myLDAP" />
        try {  <resolver:AttributeEncoder xsi:type="enc:SAML1String"

                      name="urn:mace:dir:attribute-def:norEduPersonNIN" />
  // Get a ref to the NIN received from ldap
              <resolver:AttributeEncoder xsi:type="enc:SAML2String"
         // Change employeeNumber to your NIN attribute name="urn:oid:1.3.6.1.4.1.2428.90.1.5" friendlyName="norEduPersonNIN" />

          <Script>
              nin=employeeNumber.getValues().get(0);
  <![CDATA[
               // Script to handle 10 position wide national// identityOnly numbers
do decoration of NINs which are on the format YYMMDDxxxx
      // Create 12 position wide norEduPersonNIN from the attribute mittPersonnummer
         if(nin.length() == 10) {
   // Change employeeNumber to your NIN attribute name
                      // Create the trytwo {
alternative return strings we have to choose between 
                        // Get a ref to the NIN received frompnr19 ldap
= "19" + nin;
                             // Change mittPersonnummer topnr20 your= NIN"20" attribute+ namenin;
                                nin=employeeNumber.getValues().get(0);
      // Extract year/month/day from the NIN string
                          // Only do decoration of NINs whichm_y are on the format YYMMDDxxxx
= nin.substring(0,2);
                                m_m =  if(nin.lengthsubstring(2,4);
  == 10) {
                            m_d = nin.substring(4,6);
          // Create the two alternative return strings we have to choose between
           // Create a Date object for the 20xx case
                     pnr19 = "19" + nin;
       datePnr = new Date("20" + m_y, m_m-1, m_d);
                          pnr20 = "20" + nin;
  // Create a Date object for the current date
                              // Extract year/month/day from the NIN stringdateCur = new Date(); 
                                // Verify the value of datePnr   m_y = nin.substring(0,2);before proceeding
                                if(isNaN(datePnr.valueOf())) {
       m_m = nin.substring(2,4);
                               throw("Failed to parse the NIN into a   m_d = nin.substring(4,6Date object");
                                }       
 // Create a Date object for the 20xx case
                       // If the 20xx case is in the future we assume 19xx for the NIN attribute
  datePnr = new Date("20" + m_y, m_m-1, m_d);
                       if(datePnr>dateCur) {
                // Create a Date object for the current date
                norEduPersonNIN.getValues().add(pnr19);
                          dateCur = new Date();
   } else {
                                   // Verify the value of datePnr before proceeding norEduPersonNIN.getValues().add(pnr20);
                                 }       if(isNaN(datePnr.valueOf())) {
                        } else if(nin.length() == 12) {
                   throw("Failed to parse the NIN into a Date object");
     norEduPersonNIN.getValues().add(nin);
                        } else {
         }
                       throw("Not setting any norEduPersonNIN since it is bogus (length=" + nin.length() +  "): " + nin); //
 If the 20xx case is in the future we assume 19xx for the NIN attribute
         }       
                }       
 if(datePnr>dateCur) {
              catch(err) {
                        throw("Not setting any norEduPersonNIN due to exception: "  norEduPersonNIN.getValues().add(pnr19);+ err); 
                }       
        ]]>     
    } else {
    </Script>
</AttributeDefinition>

Skapa attributet personalIdentityNumber baserat på norEduPersonNin

Förutsättningar:

  • Personnumret finns i norEduPersonNIN i format ÅÅÅÅMMDDXXXX
Code Block
languagexml
    <!-- Swedish eID Framework, personalIdentityNumber. Release norEduPersonNIN if it only contains numbers (filter out interim numbers) -->
    <!-- Uncomment InputAttributeDefinition if norEduPersonNIN is generated by a script or InputDataConnector if it is an attribute in LDAP -->
   norEduPersonNIN.getValues().add(pnr20);
                                        }
                                } else if(nin.length() == 12) {
          <AttributeDefinition xsi:type="RegexSplit" id="personalIdentityNumber" regex="^((18|19|20)?[0-9]{2}((0[0-9])|(10|11|12))((([0-2][0-9])|(3[0-1]))|((6[1-9])|([7-8][0-9])|(9[0-1])))[0-9]{4})$">
        <!-- <InputAttributeDefinition ref="norEduPersonNIN"/> -->
        <!-- <InputDataConnector     ref="myLDAP" attributeNames="norEduPersonNIN" /> -->
      norEduPersonNIN.getValues().add(nin);
  <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:personalIdentityNumber" encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.2.752.29.4.13" friendlyName="personalIdentityNumber"               } else {encodeType="false" />
     </AttributeDefinition>


Skapa attributet schacDateOfBirth baserat på norEduPersonNin

Förutsättningar:

  • Ett svenskt personnummer finns i norEduPersonNIN (se ovan). 
Code Block
languagexml
    <!-- Schema: SCHema for ACademia (SCHAC) -->
    <!-- This takes the norEduPersonNIN and returns the date of birth part. -->
    <!-- Uncomment InputAttributeDefinition if norEduPersonNIN is generated by throw("Not setting any norEduPersonNIN sincea script or InputDataConnector if it is bogus (length=" + nin.length() + "): " + nin);
                                }
                        }
                        catch(err) {
                                throw("Not setting any norEduPersonNIN due to exception: " + err);
                        }
                ]]>
        </Script>
</resolver:AttributeDefinition>

personalIdentityNumber

Förutsättningar:

  • Personnumret finns i norEduPersonNIN i format ÅÅÅÅMMDDXXXX
Code Block
languagexml
    <!-- Swedish eID Framework, personalIdentityNumber. Release norEduPersonNIN if it only contains numbers (filter out interim numbers) -->
    <AttributeDefinition xsi:type="ScriptedAttribute" id="personalIdentityNumber">
        <InputDataConnector ref="myLDAP" attributeNames="norEduPersonNIN" />
        <Script>
         <![CDATA[
                // Script to take a personnumber and filter out interim numbers
                nin=norEduPersonNIN.getValues().get(0)
                if ( nin.matches("^[0-9]*$")) {
                        personalIdentityNumber.getValues().add(nin)
                }
         ]]>
        </Script>
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:personalIdentityNumber" encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.2.752.29.4.13" friendlyName="personalIdentityNumber" encodeType="false" />
    </AttributeDefinition>

schacDateOfBirth

Förutsättningar:

  • Ett svenskt personnummer finns i personalIdentityNumber (se ovan). 
Code Block
languagexml
    <AttributeDefinition xsi:type="RegexSplit" id="schacDateOfBirth" regex="^(.{8}).*$"an attribute in LDAP -->
    <AttributeDefinition xsi:type="RegexSplit" id="schacDateOfBirth" regex="^((18|19|20)?[0-9]{2}((0[0-9])|(10|11|12))((([0-2][0-9])|(3[0-1]))|((6[1-9])|([7-8][0-9])|(9[0-1])))).*$">
        <!-- <InputAttributeDefinition ref="norEduPersonNIN"/> -->
        <InputAttributeDefinition<!-- <InputDataConnector ref="myLDAP" attributeNames="personalIdentityNumbernorEduPersonNIN" /> -->
        <AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:schacDateOfBirth" encodeType="false" />
        <AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.25178.1.2.3" friendlyName="schacDateOfBirth" encodeType="false" />
    </AttributeDefinition>

...