This library lets you validate Swedish bank account numbers.
Inspired by https://github.com/jop-io/kontonummer.js. Big thanks to the creators of that package!
import SwedishBankAccountNumber exposing (SwedishBankAccountNumber)
import SwedishBankAccountNumber.ClearingNumber exposing (ClearingNumber)
type Validation
= InvalidClearingNumber String
| InvalidAccountNumber ClearingNumber String
| Valid SwedishBankAccountNumber
validate : String -> String -> Validation
validate clearingNumberString accountNumberString =
case SwedishBankAccountNumber.ClearingNumber.fromString clearingNumberString of
Ok clearingNumber ->
case SwedishBankAccountNumber.create clearingNumber accountNumberString of
Ok bankAccountNumber ->
Valid bankAccountNumber
Err (SwedishBankAccountNumber.BadAccountNumberLength length) ->
InvalidAccountNumber clearingNumber
("The account number must be " ++ getAccountNumberLength clearingNumber ++ " digits. You entered " ++ String.fromInt length ++ ".")
Err SwedishBankAccountNumber.BadChecksum ->
InvalidAccountNumber clearingNumber
"Invalid account number. Some digit is wrong."
Err (SwedishBankAccountNumber.ClearingNumber.BadLength length) ->
InvalidClearingNumber
("The clearing number must be 4-5 digits. You entered " ++ String.fromInt length ++ ".")
Err SwedishBankAccountNumber.ClearingNumber.Unknown ->
InvalidClearingNumber
"Unknown clearing number."
getAccountNumberLength : ClearingNumber -> String
getAccountNumberLength clearingNumber =
case SwedishBankAccountNumber.getAccountNumberLength clearingNumber of
SwedishBankAccountNumber.FixedLength fixedLength ->
String.fromInt fixedLength
SwedishBankAccountNumber.Range minimum maximum ->
String.fromInt minimum ++ "-" ++ String.fromInt maximum
MIT