# `NumberF.Validation`
[🔗](https://github.com/jamesnjovu/elixir_number_functions/blob/v0.3.0/lib/number_f/validation.ex#L1)

Functions for validating various numeric formats and related data.

# `card_brand`

Identifies a card network from its number, by prefix and length.

Returns `:visa`, `:mastercard`, `:amex`, `:discover`, `:diners`, `:jcb`,
`:unionpay`, `:maestro` or `:unknown`. This is presentational — it does not
validate the number. Combine with `is_valid_credit_card?/1`.

## Examples

    iex> NumberF.Validation.card_brand("4111111111111111")
    :visa

    iex> NumberF.Validation.card_brand("5500000000000004")
    :mastercard

    iex> NumberF.Validation.card_brand("378282246310005")
    :amex

    iex> NumberF.Validation.card_brand("1234")
    :unknown

# `is_valid_credit_card?`

Validates credit card numbers using the Luhn algorithm.

# `is_valid_integer?`

Checks if a string is a valid integer.

# `is_valid_number?`

Checks if a string is a valid number format.

# `luhn_check_digit`

Computes the Luhn check digit for a number that does not yet have one.

## Examples

    iex> NumberF.Validation.luhn_check_digit("411111111111111")
    1

# `valid_currency_code?`

Checks that a code is a currency this library knows about.

## Examples

    iex> NumberF.Validation.valid_currency_code?("USD")
    true

    iex> NumberF.Validation.valid_currency_code?("XYZ")
    false

# `valid_ean?`

Validates an EAN-8 or EAN-13 barcode checksum.

## Examples

    iex> NumberF.Validation.valid_ean?("4006381333931")
    true

    iex> NumberF.Validation.valid_ean?("4006381333932")
    false

# `valid_iban?`

Validates an IBAN using the ISO 13616 mod-97 checksum.

## Edge cases

Checks structure and checksum only. A well-formed IBAN can still name an account
that does not exist; only the receiving bank can confirm that.

## Examples

    iex> NumberF.Validation.valid_iban?("GB82 WEST 1234 5698 7654 32")
    true

    iex> NumberF.Validation.valid_iban?("GB82 WEST 1234 5698 7654 33")
    false

# `valid_imei?`

Validates a 15-digit IMEI, which uses the Luhn checksum.

## Examples

    iex> NumberF.Validation.valid_imei?("490154203237518")
    true

# `valid_isbn?`

Validates an ISBN-10 or ISBN-13, with or without separators.

## Examples

    iex> NumberF.Validation.valid_isbn?("978-3-16-148410-0")
    true

    iex> NumberF.Validation.valid_isbn?("0-306-40615-2")
    true

    iex> NumberF.Validation.valid_isbn?("0-306-40615-3")
    false

# `valid_luhn?`

Validates any Luhn-checksummed number, not just payment cards.

## Examples

    iex> NumberF.Validation.valid_luhn?("4111111111111111")
    true

    iex> NumberF.Validation.valid_luhn?("4111111111111112")
    false

# `valid_percentage?`

Checks that a value is a number in the 0..100 range.

## Examples

    iex> NumberF.Validation.valid_percentage?(42.5)
    true

    iex> NumberF.Validation.valid_percentage?(101)
    false

# `valid_routing_number?`

Validates a US ABA routing number by its weighted checksum.

## Examples

    iex> NumberF.Validation.valid_routing_number?("021000021")
    true

    iex> NumberF.Validation.valid_routing_number?("021000022")
    false

# `valid_upc?`

Validates a 12-digit UPC-A barcode checksum.

## Examples

    iex> NumberF.Validation.valid_upc?("036000291452")
    true

---

*Consult [api-reference.md](api-reference.md) for complete listing*
