Skip to content

Commit c728455

Browse files
committed
feat: add inn validator
1 parent f746532 commit c728455

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

validator.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package go_codes_validator
2+
3+
import (
4+
"errors"
5+
"strconv"
6+
"strings"
7+
)
8+
9+
var (
10+
errInvalidLength = errors.New("invalid inn length")
11+
errInvalidValue = errors.New("invalid inn value")
12+
)
13+
14+
func ValidateINN(inn string) (bool, error) {
15+
if len(inn) != 10 && len(inn) != 12 {
16+
return false, errInvalidLength
17+
}
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)
26+
}
27+
if len(inn) == 10 {
28+
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
29+
return controlNumber == innArr[len(innArr)-1], nil
30+
}
31+
firstControlNumber := ((7*innArr[0] + 2*innArr[1] + 4*innArr[2] + 10*innArr[3] + 3*innArr[4] + 5*innArr[5] + 9*innArr[6] + 4*innArr[7] + 6*innArr[8] + 8*innArr[9]) % 11) % 10
32+
secondControlNumber := ((3*innArr[0] + 7*innArr[1] + 2*innArr[2] + 4*innArr[3] + 10*innArr[4] + 3*innArr[5] + 5*innArr[6] + 9*innArr[7] + 4*innArr[8] + 6*innArr[9] + 8*innArr[10]) % 11) % 10
33+
return firstControlNumber == innArr[len(innArr)-2] && secondControlNumber == innArr[len(innArr)-1], nil
34+
}
35+
36+
func ValidateBIK(bik string) (bool, error) {
37+
return false, nil
38+
}
39+
40+
func ValidateOGRN(ogrn string) (bool, error) {
41+
return false, nil
42+
}
43+
44+
func ValidateOGRNIP(ogrnip string) (bool, error) {
45+
return false, nil
46+
}
47+
48+
func ValidateSNILS(snils string) (bool, error) {
49+
return false, nil
50+
}

validator_test.go

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package go_codes_validator
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestValidateBIK(t *testing.T) {
11+
t.Parallel()
12+
13+
t.Run("", func(t *testing.T) {
14+
15+
})
16+
}
17+
18+
type TestINNCase struct {
19+
INN string
20+
IsValid bool
21+
Error error
22+
}
23+
24+
func TestValidateINN(t *testing.T) {
25+
t.Parallel()
26+
27+
t.Run("invalid inn length", func(t *testing.T) {
28+
testCases := []TestINNCase{
29+
TestINNCase{
30+
INN: "12345678",
31+
Error: errInvalidLength,
32+
IsValid: false,
33+
},
34+
TestINNCase{
35+
INN: "9876543211123",
36+
Error: errInvalidLength,
37+
IsValid: false,
38+
},
39+
TestINNCase{
40+
INN: "7707083893",
41+
Error: nil,
42+
IsValid: true,
43+
},
44+
TestINNCase{
45+
INN: "526317984689",
46+
Error: nil,
47+
IsValid: true,
48+
},
49+
}
50+
for _, test := range testCases {
51+
isValid, err := ValidateINN(test.INN)
52+
assert.Equal(t, isValid, test.IsValid)
53+
assert.Equal(t, errors.Is(test.Error, err), true)
54+
}
55+
})
56+
57+
t.Run("invalid inn value", func(t *testing.T) {
58+
testCases := []TestINNCase{
59+
TestINNCase{
60+
INN: "77$7083893",
61+
Error: errInvalidValue,
62+
IsValid: false,
63+
},
64+
TestINNCase{
65+
INN: "98754321N123",
66+
Error: errInvalidValue,
67+
IsValid: false,
68+
},
69+
TestINNCase{
70+
INN: "9854132d1123",
71+
Error: errInvalidValue,
72+
IsValid: false,
73+
},
74+
TestINNCase{
75+
INN: "7707083893",
76+
Error: nil,
77+
IsValid: true,
78+
},
79+
TestINNCase{
80+
INN: "526317984689",
81+
Error: nil,
82+
IsValid: true,
83+
},
84+
}
85+
for _, test := range testCases {
86+
isValid, err := ValidateINN(test.INN)
87+
assert.Equal(t, isValid, test.IsValid)
88+
assert.Equal(t, errors.Is(test.Error, err), true)
89+
}
90+
})
91+
}
92+
93+
func TestValidateOGRN(t *testing.T) {
94+
t.Parallel()
95+
96+
t.Run("", func(t *testing.T) {
97+
98+
})
99+
}
100+
101+
func TestValidateOGRNIP(t *testing.T) {
102+
t.Parallel()
103+
104+
t.Run("", func(t *testing.T) {
105+
106+
})
107+
}
108+
109+
func TestValidateSNILS(t *testing.T) {
110+
t.Parallel()
111+
112+
t.Run("", func(t *testing.T) {
113+
114+
})
115+
}

0 commit comments

Comments
 (0)