Vad är ett personnummer?
Personnumret är ett unikt identifieringsnummer som Skatteverket tilldelar alla som folkbokförs i Sverige. Det används i kontakt med myndigheter, vård, skola, bank och digitala tjänster som kräver identifiering.
Numret är en kombination av födelsedata och ett löpnummer, plus en kontrollsiffra som gör det möjligt att verifiera att numret är korrekt angivet.
Viktigt om integritet
Personnumret är en känslig personuppgift enligt GDPR. Samla inte in eller lagra personnummer utan ett tydligt, lagligt ändamål. Informera alltid användaren om varför numret behövs och hur det hanteras.
Vad är ett samordningsnummer?
Samordningsnumret tilldelas av Skatteverket till personer som inte är folkbokförda i Sverige men som ändå behöver en identitetsbeteckning – till exempel arbetstagare med tillfälliga uppdrag, EU-medborgare eller asylsökande.
Samordningsnumret har exakt samma struktur som ett personnummer, med ett viktigt undantag:
Dag + 60
Dagdelen i samordningsnumret ökas med 60. En person född den
15 i en månad får dagdelen 75 i sitt samordningsnummer
(15 + 60 = 75). Möjliga dagvärden är alltså 61–91.
Det gör att ett samordningsnummer alltid kan identifieras och skiljas från ett personnummer – ett datum med dag över 31 är per definition ett samordningsnummer.
Jämförelse
| Egenskap | Personnummer | Samordningsnummer |
|---|---|---|
| Tilldelar | Folkbokförda i Sverige | Icke folkbokförda med behov av ID |
| Dagdel (DD) | 01–31 |
61–91 (dag + 60) |
| Antal siffror | 12 | 12 |
| Kontrollsiffra | Luhn-algoritm | Samma Luhn-algoritm |
| Giltighetstid | Livslång (som huvudregel) | Tidsbegränsad, kan förnyas |
Format och struktur
Det rekommenderade formatet vid inmatning är 12-siffrigt med bindestreck:
Formatet är: fyra siffror för år (ÅÅÅÅ), två siffror för månad (MM), två siffror för dag (DD), ett bindestreck, tre siffror för löpnummer (NNN) och en kontrollsiffra (K). Totalt tretton tecken.
Exempelformat med ett fiktivt men matematiskt giltigt personnummer:
Vad varje del betyder
- ÅÅÅÅ – Födelseår (4 siffror)
- Fyrasiffrigt år, t.ex.
1985eller2003. Undanröjer tvetydighet kring vilket sekel. - MM – Födelsemånad (2 siffror)
- Alltid tvåsiffrigt, med inledande nolla:
01–12. - DD – Födelsedag (2 siffror)
-
För personnummer:
01–31.
För samordningsnummer:61–91(dag + 60). - NNN – Löpnummer (3 siffror)
- Tre siffror som skiljer personer med samma födelsedag. Den tredje siffran är könsindikator: udda siffra = man, jämn siffra = kvinna (avser registrerat kön vid tilldelning).
- K – Kontrollsiffra (1 siffra)
-
Beräknas med Luhn-algoritmen på de tio siffrorna
YYMMDDNNNK(de två första årsiffrorna – seklet, t.ex.19– används alltså inte). Gör det möjligt att snabbt detektera inmatningsfel.
Undvik kortformatet (10 siffror)
Det äldre 10-siffriga formatet (YYMMDD-NNNN) är tvetydigt för
personer födda runt sekelskiften. Använd alltid 12-siffrigt format
(ÅÅÅÅMMDD-NNNN) vid inmatning och ny lagring.
Kontrollsiffran – Luhn-algoritmen
Kontrollsiffran beräknas på de 10 siffrorna YYMMDDNNNK:
- Multiplicera varannan siffra med 2 och varannan med 1 (börja med 2 på position 1).
- Om en produkt är ≥ 10, subtrahera 9 (eller summera enskilda siffror).
- Summera alla resultat.
- Summan ska vara jämnt delbar med 10. Om inte, är numret felaktigt.
Interaktiv validator
Mata in ett personnummer eller samordningsnummer
Bindestreck infogas automatiskt – eller skriv det själv. Numret valideras i realtid.
Hur validatorn vägleder användaren
-
Automatisk formatering med skärmläsaravisering
Bindestreck infogas automatiskt när den åttonde siffran skrivits in. Vill användaren skriva bindestrecket själv – oavsett position – respekteras det. Om det skrivs in för tidigt behålls det på plats tills tillräckligt med siffror finns för att normalisera positionen. Det möjliggör inmatning i äldre stil, t.ex.
YYMMDD-NNNN, utan att bindestrecket försvinner.Eftersom skärmläsare i formulärläge normalt bara ekar det tecken användaren själv tryckt – inte tecken som infogats programmatiskt – annonseras bindestreckets infogande separat via en dold
aria-live="polite"-region med texten "Bindestreck tillagt – ange nu de fyra sista siffrorna." Annonseringen sker medpoliteför att inte avbryta pågående tal, och regionen rensas när fältet nollställs så att meddelandet inte upprepas vid återbesök. -
Felaktiga tecken visas och förklaras
Om ett tecken som inte är en siffra skrivs in – till exempel en bokstav – lämnas det kvar i fältet och ett felmeddelande visas omedelbart. Fältet ändras alltså inte i smyg.
Det förhindrar en vanlig tillgänglighetsfälla: om tecknet tyst togs bort och användaren sedan tryckte backsteg för att korrigera sig, skulle föregående siffra raderas i stället – utan att användaren förstår varför. För den som använder skärmläsare, röstinmatning eller tangentbordsnavigering är det avgörande att fältets innehåll alltid speglar vad som faktiskt skrivits in.
Felmeddelandet annonseras direkt via
aria-live="assertive"så att skärmläsaranvändare får återkoppling utan att behöva flytta fokus. Klistra in (Ctrl+V) hanteras separat: då rensas icke-siffror automatiskt eftersom inklistring är en avsiktlig massoperation, inte en enstaka tangenttryckning. -
Framstegsindikator
Tretton segment – ett per tecken i formatet
ÅÅÅÅMMDD-NNNN– visar hur långt användaren kommit och färgkodas grönt vid godkänt nummer eller rött vid fel. Indikatorn är dold för skärmläsare (aria-hidden="true") eftersom samma information förmedlas via textmeddelanden; den är ett visuellt stöd, inte en primär informationskälla. -
Specifika felmeddelanden
Felmeddelanden förklarar vad som är fel och varför – inte bara "ogiltigt nummer".
-
Kontrollsiffran verifieras
Luhn-algoritmen körs när alla 12 siffror är ifyllda. Om kontrollsiffran inte stämmer förklarar felmeddelandet att en siffra troligen är felaktigt inskriven och nämner vanliga misstag – transponerade siffror eller en siffra för många eller för få. Det skiljer användarens inmatningsfel från ett potentiellt systemfel och ger ett handlingsbart nästa steg.
-
Extraherad information med kopieringsknapp
Korrekta lagringsformat visas direkt när numret godkänts, med möjlighet att kopiera det önskade formatet.
Lagring och systemintegration
Beroende på system och syfte används olika format. Välj rätt format för att undvika tvetydigheter och konverteringsproblem.
| Format | Exempel | Användning | Rekommendation |
|---|---|---|---|
| 12 siffror utan bindestreck | 191212121212 |
Databaser, API:er, filöverföringar | ✅ Föredragen för lagring |
| 12 siffror med bindestreck | 19121212-1212 |
Visning för användare, inmatning | ✅ Föredragen för gränssnitt |
| 10 siffror med bindestreck | 121212-1212 |
Äldre system, utskrifter | ⚠ Undvik vid ny lagring |
| 10 siffror utan bindestreck | 1212121212 |
Äldre system, import/export | ⚠ Undvik vid ny lagring |
Rekommendationer för systemintegration
- Lagra alltid i 12-siffrigt format utan bindestreck (
ÅÅÅÅMMDDNNNN) som kanonisk form i databaser. - Separera eventuellt födelsedata och suffix i olika kolumner om du behöver söka eller filtrera på dem.
- Vid API-delning: använd
personnummersom fältnamn och specificera formatet i API-dokumentationen. - Validera alltid med Luhn-algoritmen och datumkontroll vid inmatning – inte enbart vid lagring.
- Ange alltid i API-svar om ett nummer är ett personnummer eller samordningsnummer.
- Dokumentera tydligt om du lagrar krypterat eller enbart hashat – personnummer bör aldrig lagras i klartext utan kryptering av databasen.