View Source UkraineTaxidEx.Itin.Parser (ukraine_tax_id v0.1.1)

This module provides parsing functionality for Ukrainian Individual Taxpayer Identification Numbers (ITIN).

ITINs (also known as РНОКПП/ІПН) are unique identifiers assigned to individuals in Ukraine for tax purposes. The parser validates the number format and extracts meaningful components like the checksum according to official requirements.

Key features:

  • Validates ITIN format and length
  • Calculates and verifies checksum
  • Parses components into a structured format
  • Handles both raw strings and pre-validated input

Examples of successful ITIN parsing:

    iex> UkraineTaxidEx.Itin.Parser.parse("2222222222")
    {:ok, %UkraineTaxidEx.Itin{code: "2222222222", birth_date: ~D[1960-12-17], number: 2222, gender: 0, check_sum: 2, check_digit: 2}}

    iex> UkraineTaxidEx.Itin.Parser.parse("3333333333")
    {:ok, %UkraineTaxidEx.Itin{code: "3333333333", birth_date: ~D[1991-03-05], number: 3333, gender: 1, check_sum: 3, check_digit: 3}}

Examples of unsuccessful ITIN parsing:

    iex> UkraineTaxidEx.Itin.Parser.parse("123456")
    {:error, :length_too_short}

    iex> UkraineTaxidEx.Itin.Parser.parse("12345678901")
    {:error, :length_too_long}

    iex> UkraineTaxidEx.Itin.Parser.parse("1234567890")
    {:error, :invalid_checksum}

Summary

Types

itin()

@type itin() :: UkraineTaxidEx.Itin.t()

itin_or_error()

@type itin_or_error() ::
  {:ok, UkraineTaxidEx.Itin.t()}
  | {:error, :length_too_short | :length_too_long | :invalid_checksum}

itin_string()

@type itin_string() :: String.t()

string_or_ok()

@type string_or_ok() :: String.t() | {:ok, String.t()}

struct_or_error()

@type struct_or_error() :: {:ok, term()} | {:error, atom()}

Functions

base_date()

birth_date(digits)

@spec birth_date(digits :: UkraineTaxidEx.Commons.digits()) :: Date.t()

gender(digits)

number(digits)

@spec number(digits :: UkraineTaxidEx.Commons.digits()) :: integer()