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 ( category, clearingNumber ) ->
case category of
SwedishBankAccountNumber.ClearingNumber.Standard ->
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."
SwedishBankAccountNumber.ClearingNumber.DataclearingOnly ->
InvalidAccountNumber clearingNumber
("We are unfortunately not able to make transfers to "
++ SwedishBankAccountNumber.ClearingNumber.getBankName clearingNumber
++ "."
)
SwedishBankAccountNumber.ClearingNumber.Historical ->
InvalidAccountNumber clearingNumber
(SwedishBankAccountNumber.ClearingNumber.getBankName clearingNumber
++ " does not exist anymore."
)
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