A library for parsing personal numbers. The library is designed to be forgiving on input, but strict on output. It also has useful errors and JSON decoders/encoders.
- Swedish personal numbers (personnummer).
- Swedish personal numbers for foreign visitors (sammordningsnummer).
- Norwegian personal numbers (fødselsnummer).
- UK National Insurance Numbers (NINO).
import PersonalNumber.Swedish as PersonalNumber exposing (ValidationError(..))
personalNumber : String -> String
personalNumber str =
case PersonalNumber.fromString str of
Ok pnr ->
-- The `pnr` is wrapped in a `PersonalNumber` type and is
-- guaranteed to be valid. Use the `display` function to turn
-- it back into a user readable string.
PersonalNumber.display pnr
Err InvalidFormat ->
"Not the correct format for a swedish personal number."
Err InvalidLength ->
"The personal number is not of the correct length."
Err InvalidDate ->
"The first part of the personal number needs to be a valid date."
Err InvalidChecksum ->
"One or more digits in the personal number is wrong."
import PersonalNumber.Swedish as PersonalNumber
import Json.Decode exposing (Decoder, map2, field)
import Json.Encode exposing (Value, object)
type alias Person =
{ personalNumber : PersonalNumber.PersonalNumber
}
decoder : Decoder Person
decoder =
map2 Person
(field "personal_number" PersonalNumber.decoder)
encode : Person -> Value
encode person =
object
[ ( "personal_number", PersonalNumber.encode person.personalNumber )
]