https://github.com/scrive/elm-personal-number
Frontend Personal Number validation for different countries.
https://github.com/scrive/elm-personal-number
personal-number ssn validation
Last synced: over 1 year ago
JSON representation
Frontend Personal Number validation for different countries.
- Host: GitHub
- URL: https://github.com/scrive/elm-personal-number
- Owner: scrive
- License: mit
- Created: 2024-07-17T12:00:19.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-02-25T11:02:28.000Z (over 1 year ago)
- Last Synced: 2025-03-15T11:52:20.926Z (over 1 year ago)
- Topics: personal-number, ssn, validation
- Language: Elm
- Homepage: https://package.elm-lang.org/packages/scrive/elm-personal-number/latest/
- Size: 31.3 KB
- Stars: 2
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Elm Personal Number
[](https://github.com/scrive/elm-personal-number/actions)
A library for validating personal numbers. Built from the ground up using parser combinators!
## Supported countries
- Swedish personal numbers (personnummer).
- Swedish personal numbers for foreign visitors (sammordningsnummer).
- Norwegian personal numbers (fødselsnummer).
- Finnish personal numbers (henkilötunnus).
- Danish personal numbers (personnummer).
## Example usage
```elm
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
```elm
import PersonalNumber.Swedish as PersonalNumber
import Json.Decode as Decode
import Json.Encode as Encode
type alias Person =
{ personalNumber : PersonalNumber.PersonalNumber
}
decoder : Decoder Person
decoder =
Decode.map2 Person
(Decode.field "personal_number" PersonalNumber.decoder)
encode : Person -> Value
encode person =
Encode.object
[ ( "personal_number", PersonalNumber.encode person.personalNumber )
]
```