Skip to content

niho/personal-number

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d716870 · Aug 30, 2023

History

10 Commits
Aug 25, 2023
Aug 30, 2023
Aug 30, 2023
Aug 30, 2023
Dec 29, 2018
Aug 30, 2023
Aug 30, 2023
Aug 25, 2023
Aug 25, 2023

Repository files navigation

Personal number

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.

Support

  • Swedish personal numbers (personnummer).
  • Swedish personal numbers for foreign visitors (sammordningsnummer).
  • Norwegian personal numbers (fødselsnummer).
  • UK National Insurance Numbers (NINO).

Example usage

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."

JSON

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 )
    ]