Ingen orsak, trevligt att kunna bidra lite också
Tack själv för information om kompletteringsbehovet med. Jag misstänker att ni även
kompletterar (wrappar) koden med felhantering och loggning på samma sätt som ni har för de
andra exempelskripten. Jag tog inte med det i koden jag skickade.
Med vänlig hälsning
/Johan
-----Original Message-----
From: Paul Scott <paul.scott(a)kau.se>
Sent: den 5 oktober 2026 09:09
To: saml-admins(a)lists.sunet.se
Subject: [Saml-admins] Re: Är guidelines för hantering av schacDateOfBirth baserat på
norEduPersonNIN korrekta?
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>.
_______________________________________________
Saml-admins mailing list -- saml-admins(a)lists.sunet.se To unsubscribe send an email to
saml-admins-leave(a)lists.sunet.se