Skip to content

insurello/elm-swedish-bank-account-number

Repository files navigation

elm-swedish-bank-account-number

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!

📎 Data sources

Example

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

License

MIT


Insurello