-
-
Notifications
You must be signed in to change notification settings - Fork 59
/
phone.go
114 lines (94 loc) · 3.38 KB
/
phone.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package faker
import (
"fmt"
"strings"
)
var (
phoneFormats = []string{
// International format
"+1-{{areaCode}}-{{exchangeCode}}-####",
"+1 ({{areaCode}}) {{exchangeCode}}-####",
"+1-{{areaCode}}-{{exchangeCode}}-####",
"+1.{{areaCode}}.{{exchangeCode}}.####",
"+1{{areaCode}}{{exchangeCode}}####",
// Standard formats
"{{areaCode}}-{{exchangeCode}}-####",
"({{areaCode}}) {{exchangeCode}}-####",
"1-{{areaCode}}-{{exchangeCode}}-####",
"{{areaCode}}.{{exchangeCode}}.####",
"{{areaCode}}-{{exchangeCode}}-####",
"({{areaCode}}) {{exchangeCode}}-####",
"1-{{areaCode}}-{{exchangeCode}}-####",
"{{areaCode}}.{{exchangeCode}}.####",
// Extensions
"{{areaCode}}-{{exchangeCode}}-#### x###",
"({{areaCode}}) {{exchangeCode}}-#### x###",
"1-{{areaCode}}-{{exchangeCode}}-#### x###",
"{{areaCode}}.{{exchangeCode}}.#### x###",
"{{areaCode}}-{{exchangeCode}}-#### x####",
"({{areaCode}}) {{exchangeCode}}-#### x####",
"1-{{areaCode}}-{{exchangeCode}}-#### x####",
"{{areaCode}}.{{exchangeCode}}.#### x####",
"{{areaCode}}-{{exchangeCode}}-#### x#####",
"({{areaCode}}) {{exchangeCode}}-#### x#####",
"1-{{areaCode}}-{{exchangeCode}}-#### x#####",
"{{areaCode}}.{{exchangeCode}}.#### x#####",
}
tollFreeAreaCodes = []string{"800", "844", "855", "866", "877", "888"}
tollFreeFormats = []string{ // Standard formats
"{{tollFreeAreaCode}}-{{exchangeCode}}-####",
"({{tollFreeAreaCode}}) {{exchangeCode}}-####",
"1-{{tollFreeAreaCode}}-{{exchangeCode}}-####",
"{{tollFreeAreaCode}}.{{exchangeCode}}.####",
}
)
// Phone is a faker struct for Phone
type Phone struct {
Faker *Faker
}
// AreaCode returns a fake area code for Phone
func (p Phone) AreaCode() (code string) {
number1 := p.Faker.IntBetween(2, 9)
number2 := p.Faker.RandomDigit()
number3 := p.Faker.RandomDigitNot(number2)
return fmt.Sprintf("%d%d%d", number1, number2, number3)
}
// ExchangeCode returns a fake exchange code for Phone
func (p Phone) ExchangeCode() (code string) {
number1 := p.Faker.IntBetween(2, 9)
number2 := p.Faker.RandomDigit()
number3 := p.Faker.RandomDigit()
if number2 == 1 {
number3 = p.Faker.RandomDigitNot(1)
}
return fmt.Sprintf("%d%d%d", number1, number2, number3)
}
// Number returns a fake phone number for Phone
func (p Phone) Number() string {
number := p.Faker.RandomStringElement(phoneFormats)
// {{areaCode}}
number = strings.Replace(number, "{{areaCode}}", p.AreaCode(), 1)
// {{exchangeCode}}
number = strings.Replace(number, "{{exchangeCode}}", p.ExchangeCode(), 1)
return p.Faker.Numerify(number)
}
// TollFreeAreaCode returns a fake toll free area code for Phone
func (p Phone) TollFreeAreaCode() string {
return p.Faker.RandomStringElement(tollFreeAreaCodes)
}
// ToolFreeNumber returns a fake tool free number for Phone
func (p Phone) ToolFreeNumber() string {
number := p.Faker.RandomStringElement(tollFreeFormats)
// {{tollFreeAreaCode}}
number = strings.Replace(number, "{{tollFreeAreaCode}}", p.TollFreeAreaCode(), 1)
// {{exchangeCode}}
number = strings.Replace(number, "{{exchangeCode}}", p.ExchangeCode(), 1)
return p.Faker.Numerify(number)
}
// E164Number returns a fake E164 phone number for Phone
func (p Phone) E164Number() string {
// Excluding 0 since it cannot be any country code in E164
firstDigit := p.Faker.IntBetween(1, 9)
randomDigits := p.Faker.Numerify("##########")
return fmt.Sprintf("+%d%s", firstDigit, randomDigits)
}