Skip to content

Commit 22191c4

Browse files
committed
feat: add bik validator
1 parent c728455 commit 22191c4

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

validator.go

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,34 @@ import (
77
)
88

99
var (
10-
errInvalidLength = errors.New("invalid inn length")
11-
errInvalidValue = errors.New("invalid inn value")
10+
errInvalidINNLength = errors.New("invalid inn length")
11+
errInvalidBIKLength = errors.New("invalid bik length")
12+
13+
errInvalidValue = errors.New("invalid code value")
14+
15+
errInvalidBIKCountryCode = errors.New("invalid bik country code")
1216
)
1317

18+
func strToArr(str string) ([]int, error) {
19+
numbers := strings.Split(str, "")
20+
arr := make([]int, 0, len(numbers))
21+
for _, number := range numbers {
22+
number, err := strconv.Atoi(number)
23+
if err != nil {
24+
return []int{}, errInvalidValue
25+
}
26+
arr = append(arr, number)
27+
}
28+
return arr, nil
29+
}
30+
1431
func ValidateINN(inn string) (bool, error) {
1532
if len(inn) != 10 && len(inn) != 12 {
16-
return false, errInvalidLength
33+
return false, errInvalidINNLength
1734
}
18-
innNumbers := strings.Split(inn, "")
19-
innArr := make([]int, 0, len(inn))
20-
for _, str := range innNumbers {
21-
number, err := strconv.Atoi(str)
22-
if err != nil {
23-
return false, errInvalidValue
24-
}
25-
innArr = append(innArr, number)
35+
innArr, err := strToArr(inn)
36+
if err != nil {
37+
return false, err
2638
}
2739
if len(inn) == 10 {
2840
controlNumber := ((2*innArr[0] + 4*innArr[1] + 10*innArr[2] + 3*innArr[3] + 5*innArr[4] + 9*innArr[5] + 4*innArr[6] + 6*innArr[7] + 8*innArr[8]) % 11) % 10
@@ -34,7 +46,25 @@ func ValidateINN(inn string) (bool, error) {
3446
}
3547

3648
func ValidateBIK(bik string) (bool, error) {
37-
return false, nil
49+
if len(bik) != 9 {
50+
return false, errInvalidBIKLength
51+
}
52+
bikArr, err := strToArr(bik)
53+
if err != nil {
54+
return false, err
55+
}
56+
if bikArr[0] != 0 && bik[1] != 4 {
57+
return false, errInvalidBIKCountryCode
58+
}
59+
if bikArr[6] == 0 && bikArr[7] == 1 && bikArr[8] == 0 {
60+
return true, nil
61+
}
62+
latestTriadStr := bik[6:]
63+
code, err := strconv.Atoi(latestTriadStr)
64+
if err != nil {
65+
return false, errInvalidValue
66+
}
67+
return code >= 50 && code < 1000, nil
3868
}
3969

4070
func ValidateOGRN(ogrn string) (bool, error) {

0 commit comments

Comments
 (0)