Introducerar ActiveLogin.Identity.Swedish
Idag introducerar vi ActiveLogin.Identity.Swedish 2.0.0, ett bibliotek för parsning, validering och normalisering av svenska personnummer för .NET. Enkelt att installera frÄn NuGet och all kÀllkod tillgÀnglig pÄ GitHub.
I flera kundprojekt har vi haft ett behov att hantera personnummer. I sin enklaste form kan det handla om att en anvÀndare matar in ett personnummer i ett formulÀr, eller att vi tar emot ett personnummer frÄn ett annat system.
NÀr vi sÄg behovet av validering och normalisering av personnummer i flera projekt undersökte vi vad för bibliotek som fanns tillgÀnliga. De vi hittade byggde antingen pÄ enkla Regex som inte validerade checksumman, eller sÄ kunde de endast validera men inte normalisera personnumret. DÀrför valde vi att sjÀlva implementera en lösning som skulle lösa dessa problem.
ActiveLogin.Identity.Swedish Àr byggt i .NET Standard och kan dÀrför anvÀndas i t.ex. .NET Core och .NET Framework. Det Àr enkelt att installera och köra pÄ flertalet plattformar sÄ som Windows, Linux och macOS.
Biblioteket hanterar bÄde personnummer med sekelsiffra (12-siffror YYYYMMDDBBBC) och utan (10 siffror YYMMDD-BBBC, YYMMDD+BBBC). Alla ogiltiga tecken och blanksteg tvÀttas bort före parsning och biblioteket kan parsa alla inputstrÀngar som innehÄller ett giltigt personnummer med 10 eller 12 siffror. SjÀlvklart verifieras Àven checksumman för att sÀkerstÀlla att personnummret Àr korrekt. För exempel pÄ giltiga och ogiltiga input se testerna.
ExempelanvÀndning C#
Installera paketet, t.ex. med dotnet cli
dotnet add ActiveLogin.Identity.Swedish
Parsa ett personnummer
using ActiveLogin.Identity.Swedish; if (SwedishPersonalIdentityNumber.TryParse("990807-2391", out var personalIdentityNumber)) { Console.WriteLine($"Personnummer med 10 siffror: {personalIdentityNumber.To10DigitString()}"); Console.WriteLine($"Personnummer med 12 siffror: {personalIdentityNumber.To12DigitString()}"); } else { Console.WriteLine("Personnumret Àr inte giltigt"); } // Output: // Personnummer (10 siffror): 990807-2391 // Personnummer representerat med 12 siffror: 199908072391
ExempelanvÀndning F#
DÄ biblioteket Àr implementerat i F# exponerar vi Àven ett F#-vÀnligt api för den som sÄ föredrar.
Installera paketet, förslagsvis med paket
paket add ActiveLogin.Identity.Swedish`
Parsa ett personnummer
open ActiveLogin.Identity.Swedish.FSharp let pin = "990807-2391" |> SwedishPersonalIdentityNumber.parse |> Error.handle pin |> SwedishPersonalIdentityNumber.to10DigitString |> printfn "Personnummer med 10 siffror: %s" pin |> SwedishPersonalIdentityNumber.to12DigitString |> printfn "Personnummer med 12 siffror: %s" // Output: // Personnummer (10 siffror): 990807-2391 // Personnummer representerat med 12 siffror: 199908072391
HjÀlpfunktioner
Biblioteket innehÄller Àven ett antal hjÀlpfunktioner som kan anvÀndas för att lÀsa ut data frÄn ett personnummer, t.ex. födelsedatum, Älder och kön. Eftersom det inte finns nÄgot sÀtt att garantera att dessa uppgifter Àr korrekta har vi valt att ge dessa funktioner ett Hints-suffix.
I C# Àr metoderna exponerade som extensionmetoder och ligger i namespacet ActiveLogin.Identity.Swedish.Extensions. De kan anvÀndas enligt:
using ActiveLogin.Identity.Swedish; using ActiveLogin.Identity.Swedish.Extensions; var pin = new SwedishPersonalIdentityNumber(1999, 8, 7, 239, 1); Console.WriteLine($"Födelsedatum: {pin.GetDateOfBirthHint().ToShortDateString()}"); Console.WriteLine($"à lder: {pin.GetAgeHint().ToString()}"); Console.WriteLine($"Kön: {pin.GetGenderHint().ToString()}"); // Output: // Födelsedatum: 8/7/99 // à lder: 19 // Kön: Male
I F# hittas funktionerna i en Hints-modul:
open ActiveLogin.Identity.Swedish.FSharp let pin = { Year = 1999 Month = 8 Day = 7 BirthNumber = 239 Checksum = 1 } |> SwedishPersonalIdentityNumber.create |> Error.handle pin |> SwedishPersonalIdentityNumber.Hints.getDateOfBirthHint |> fun date -> date.ToShortDateString() |> printfn "Födelsedatum: %s" pin |> SwedishPersonalIdentityNumber.Hints.getAgeHint |> Option.iter (printfn "à lder: %i") pin |> SwedishPersonalIdentityNumber.Hints.getGenderHint |> printfn "Kön: %A" // Output: // Födelsedatum: 8/7/99 // à lder: 19 // Kön: Male
Tester
Implementationen har arbetats fram testdrivet och idag finns mer Àn 200 tester som sÀkerstÀller att vi följer Folkbokföringslagens definition (FOL 18 §). För att vara kompatibel med GDPR anvÀnds de testpersonnummer som Skatteverket tillhandahÄller som öppen data.
Vill du vara med och bidra till utvecklingen av Active Login?
ActiveLogin Àr ett Open Source projekt och vi ser gÀrna att fler Àr med och bidrar. All kÀllkod finns tillgÀnglig pÄ GitHub under MIT-licensen. GrundlÀggande kunskap om Git och GitHub krÀvs för att komma igÄng. Skicka in dina kodÀndringar som en Pull request. Glöm inte att skriva en utförlig beskrivning och att tillhandahÄlla tester som tÀcker de Àndringar du har gjort. Har du idéer om ny funktionalitet eller stött pÄ problem? Skapa en ny Issue för att starta en diskussion om Àmnet.
Sist men inte minst, ge gÀrna vÄrt repo en stjÀrna om du gillar projektet :)
Författare
Det hÀr blogginlÀgget Àr komponerat av Viktor Andersson, en av huvudutvecklarna bakom ActiveLogin.Identity, till vardags IT-konsult och systemutvecklare pÄ Active Solution.
















