defmodule Faker.Phone.PtBr do
import Faker, only: [sampler: 2]
@moduledoc """
Function to generate Brazilian phone numbers.
"""
@doc """
Returns a random phone number.
## Examples
iex> Faker.Phone.PtBr.phone()
"(75) 9 1542-6461"
iex> Faker.Phone.PtBr.phone()
"(75) 4329-7052"
iex> Faker.Phone.PtBr.phone()
"(69) 9 7020-3032"
iex> Faker.Phone.PtBr.phone()
"(75) 5733-7603"
"""
@spec phone :: binary
def phone do
base_template_number()
|> Faker.format()
|> number_with_region()
end
@doc """
Replace 'xx' for a random region number picked.
## Examples
iex> Faker.Phone.PtBr.number_with_region("(xx) 9 1542-6461")
"(92) 9 1542-6461"
iex> Faker.Phone.PtBr.number_with_region("(xx) 4329-7052")
"(31) 4329-7052"
iex> Faker.Phone.PtBr.number_with_region("(xx) 9 7020-3032")
"(71) 9 7020-3032"
iex> Faker.Phone.PtBr.number_with_region("(xx) 5733-7603")
"(71) 5733-7603"
"""
@spec number_with_region(binary) :: binary
def number_with_region(number) do
region = generate_region_code()
number
|> String.replace("xx", region)
end
@doc """
Pick a random region code from list
## Examples
iex> Faker.Phone.PtBr.generate_region_code()
"92"
iex> Faker.Phone.PtBr.generate_region_code()
"31"
iex> Faker.Phone.PtBr.generate_region_code()
"71"
iex> Faker.Phone.PtBr.generate_region_code()
"71"
"""
@spec generate_region_code :: binary
def generate_region_code do
region_code()
|> Integer.to_string()
end
sampler(:base_template_number, [
"(xx) 9 ####-####",
"(xx) 2###-####",
"(xx) 3###-####",
"(xx) 4###-####",
"(xx) 5###-####"
])
sampler(:region_code, [
71,
75,
11,
21,
27,
31,
41,
47,
51,
81,
82,
83,
84,
85,
86,
61,
62,
63,
65,
67,
68,
69,
71,
79,
91,
92,
95,
96,
98
])
end