Hej Johan,
Tack för skriptet. Vi kommer att lägga in det i Swamids exempel för
attribute-resolver.xml.
Om man har en miljö där det kan finnas personer i LDAP-katalogen utan
norEduPersonNIN (t.ex. utländsk personal) behövs ytterligare en if-sats
för att skydda den första raden. Annars får man ett undefined exception
vid anrop till getValues().
Jag föreslår därför:
if (typeof norEduPersonNIN !== "undefined" && norEduPersonNIN != null)
{
// kod nedan
}
/Paul
-----Original Message-----
From: Johan Hjortskull <johan.hjortskull(a)lnu.se>
To: Fredrik Domeij <fredrik.domeij(a)umu.se>, Swamid saml-admins
<saml-admins(a)swamid.se>
Subject: [Saml-admins] Re: Är guidelines för hantering av
schacDateOfBirth baserat på norEduPersonNIN korrekta?
Date: 28/09/26 13:05:05
Hej igen.
Här kommer ett förslag på implementation som vi kommer att utgå ifrån.
Det skall använda sig av ”enkel” Javascript för att minska risken för
att olika motorer har olika stöd för vissa funktioner/konstruktioner:
<!-- Schema: SCHema for ACademia (SCHAC) -->
<!--
This takes the norEduPersonNIN and returns the date of birth part. Red
uces day by 60 for coordination numbers -->
<AttributeDefinition xsi:type="ScriptedAttribute" id="schacDateOfBi
rth">
<InputAttributeDefinition ref="norEduPersonNIN"/>
<Script><![CDATA[
var values = norEduPersonNIN.getValues();
if (values != null && !values.isEmpty()) {
var nin = String(values.iterator().next());
/*
* Expected format:
* YYYYMMDDNNNN
*
* Day part may be:
* 01-31 for person identification number
* 61-91 för coordination number
*/
var match = /^((18|19|20)[0-9]{2})((0[1-
9])|(10|11|12))((0[1-9])|([1-2][0-9])|(3[0-1])|(6[1-9])|([7-8][0-
9])|(9[0-1]))[0-9]{4}$/.exec(nin);
if (match != null) {
var yearAndMonth = nin.substring(0, 6);
var day = parseInt(nin.substring(6, 8), 10);
/*
* Coordination numbers have date part increased by 60.
*/
if (day >= 61) {
day = day - 60;
}
/*
* Additional check after normalization.
* This check verifies the interval, but not that
* February actually only has at most 28 or 29 days.
*/
if (day >= 1 && day <= 31) {
var dayString;
if (day < 10) {
dayString = "0" + day;
} else {
dayString = String(day);
}
schacDateOfBirth.addValue(
yearAndMonth + dayString
);
}
}
}
]]></Script>
Man kan tycka att det är ”onödigt” att köra kontrollmatchningen i denna
kod, eftersom input-attributet är norEduPersonNIN som redan verifierats
mot (nästan) samma regex, och det går såklart.
Med vänlig hälsning
/Johan
From: Johan Hjortskull <johan.hjortskull(a)lnu.se>
Sent: den 28 september 2026 09:07
To: Fredrik Domeij <fredrik.domeij(a)umu.se>; Swamid saml-admins
<saml-admins(a)swamid.se>
Subject: [Saml-admins] Re: Är guidelines för hantering av
schacDateOfBirth baserat på norEduPersonNIN korrekta?
Tack för återkopplingen Fredrik.
Tyvärr (för oss) har vi haft även haft andra källor än Ladok och Nya
för personnummer, så vi har hanterat samordningsnummer i dessa fält.
Jag har ett kodblock för omvandling av samordningsnummer =>
schacDateOfBirth som gärna publicerar här. Jag vill bara verifiera det
först😊
Återkommer…
Med vänlig hälsning
/Johan
From: Fredrik Domeij <fredrik.domeij(a)umu.se>
Sent: den 25 september 2026 19:36
To: Johan Hjortskull <johan.hjortskull(a)lnu.se>; Swamid saml-admins
<saml-admins(a)swamid.se>
Subject: Re: Är guidelines för hantering av schacDateOfBirth baserat på
norEduPersonNIN korrekta?
Jag tycker det låter som du är helt rätt ute. Ladok och
Antagning.se/NyA har genom historien aldrig hanterat samordningsnummer
och norEduPersonNIN har aldrig(tm) använts till något annat än
förmedling av personnummer och interimspersonnummer (aldrig
samordningsnummer) mellan system inom högre utbildning inom Swamid, så
fallet du beskriver har helt enkelt aldrig uppstått.
Regexpet i "Skapa attributet schacDateOfBirth baserat på
norEduPersonNIN" på sidan du länkar till hanterar att matcha på
samordningsnummer men minskar inte dag med 60. Regexpet hanterar inte
att norEduPersonNIN innehåller ett interimspersonnummer heller, som
precis som personnummer har födelsedata som första 8 tecken.
Det skulle behövas ett smartare script där som tar hänsyn till både
samordningsnummer och interimspersonnummer och utifrån det får ut rätt
schacDateOfBirth. Har du lyckats med det? I så fall kan du skicka det
så uppdaterar vi sidan!
/Fredrik
Fredrik Domeij
----------------------------------
Ladok Operations
IT-stöd och systemutveckling (ITS)
Umeå universitet
901 87 Umeå
----------------------------------
Telefon: +46 (0)90 786 65 43
Mobil: +46 (0)70 303 78 36
----------------------------------
fredrik.domeij(a)umu.se
www.umu.se/it-stod-och-systemutveckling
From: Johan Hjortskull <johan.hjortskull(a)lnu.se>
Sent: Friday, September 25, 2026 4:37 PM
To: Swamid saml-admins <saml-admins(a)swamid.se>
Subject: [Saml-admins] Är guidelines för hantering av schacDateOfBirth
baserat på norEduPersonNIN korrekta?
Hej.
I samband med en översyn av våra processer kring samordningsnummer så
noterar vi en sak som väcker frågor. Vår implementation gällande
generering av schacDateOfBirth baseras på informationen på SWAMID:s
Wikihttps://wiki.sunet.se/spaces/SWAMID/pages/69042390/Svenska+personnummer+norEduPersonNIN+personalIdentityNumber+och+schacDateOfBirth
samthttps://wiki.sunet.se/spaces/SWAMID/pages/69042384/Example+of+a+standard+attribute+resolver+for+Shibboleth+IdP+v5+and+above
. Där förespråkas (i princip) att direkt bara plocka de första 8
tecknen från norEduPersonNIN, vilket innehåller personnummer eller
samordningsnummer, dock ej interimspersonnummer. Vad som blir fel här
är i så fall att schacDateOfBirth innehåller ett värde som inte är ett
datum i de fall vi använder norEduPersonNIN som källa.Taget från specen
på
https://wiki.refeds.org/display/STAN/SCHAC+Releases?preview=/44957731/12890…
så skall värdet vara av formatet ”Numeric value YYYYMMDD, using 4
digits for year, 2 digits for month and 2digits for day as described in
RFC 3339 'Date and Time on the Internet:Timestamps' as reference using
the 'full-date' format from paragraph 5.6 but without the dashes.”.
Nu vill jag justera vår implementation så att vi justerar bort de extra
60 dagarna från samordningsnummer, detta så att vi följer standarden så
att vi för en person släpper samma schacDateOfBirth som t.ex. en annan
tjänst gör. Rätt eller fel?
Är det någon som ser problem/risker med att byta implementationen? Vi
kommer ju i så fall släppa ändrade schacDateOfBirth för personer. Är
det någon annan som tidigare noterat detta och som vill dela med sig av
erfarenheter av en justering? Har vi inom SWAMID ett undantag i
hanteringen av detta fält, som gör att vi oss emellan förväntas kunna
skicka samordningsvärden istället? Problemet jag upplever blir när vi
autentiserar mot tjänster som förväntar sig ”korrekta” datum.
Med vänlig hälsning
/Johan
_________________________________________
Johan Hjortskull
Systemarkitekt
Linnéuniversitetet
IT-avdelningen
391 82 Kalmar / 351 95 Växjö
Lnu.se
Vi sätter kunskap i rörelse för en hållbar samhällsutveckling.
Linnéuniversitetet – ett modernt, internationellt universitet i
Småland.
Vi behandlar personuppgifter enligt reglerna i Dataskyddsförordningen,
se
Lnu.se/personuppgifter.
_______________________________________________
Saml-admins mailing list -- saml-admins(a)lists.sunet.se
To unsubscribe send an email to saml-admins-leave(a)lists.sunet.se
--
Paul Scott
Systemutvecklare | Systems developer
KARLSTADS UNIVERSITET | KARLSTAD UNIVERSITY
SE-651 88 Karlstad Sweden
Tel: +46 54 700 23 07
www.kau.se
När du skickar e-post till Karlstads universitet behandlar vi dina
personuppgifter<https://www.kau.se/gdpr>.
When you send an e-mail to Karlstad University, we will process your personal
data<https://www.kau.se/en/gdpr>.