Skip to content

Commit 03071a0

Browse files
committed
feat: implemented all methods
1 parent 9331d33 commit 03071a0

File tree

1 file changed

+52
-3
lines changed

1 file changed

+52
-3
lines changed

validator.go

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ func strToArr(str string) ([]int, error) {
1818
return arr, nil
1919
}
2020

21+
// IsINNValid
22+
// example valid format is
2123
func IsINNValid(inn string) (bool, error) {
2224
if len(inn) != 10 && len(inn) != 12 {
2325
return false, ErrInvalidINNLength
@@ -35,6 +37,8 @@ func IsINNValid(inn string) (bool, error) {
3537
return firstControlNumber == innArr[len(innArr)-2] && secondControlNumber == innArr[len(innArr)-1], nil
3638
}
3739

40+
// IsBIKValid
41+
// example valid format is
3842
func IsBIKValid(bik string) (bool, error) {
3943
if len(bik) != 9 {
4044
return false, ErrInvalidBIKLength
@@ -55,18 +59,63 @@ func IsBIKValid(bik string) (bool, error) {
5559
return code >= 50 && code < 1000, nil
5660
}
5761

62+
// IsOGRNValid
63+
// example valid format is
5864
func IsOGRNValid(ogrn string) (bool, error) {
59-
return false, nil
65+
if len(ogrn) != 13 {
66+
return false, ErrInvalidOGRNLength
67+
}
68+
ogrnArr, err := strToArr(ogrn)
69+
if err != nil {
70+
return false, err
71+
}
72+
code, _ := strconv.Atoi(ogrn[:12])
73+
return ogrnArr[len(ogrn)-1] == code%11%10, nil
6074
}
6175

76+
// IsOGRNIPValid check to valid OGRNIP format
77+
// example valid format is
6278
func IsOGRNIPValid(ogrnip string) (bool, error) {
63-
return false, nil
79+
if len(ogrnip) != 15 {
80+
return false, ErrInvalidOGRNIPLength
81+
}
82+
ogrnipArr, err := strToArr(ogrnip)
83+
if err != nil {
84+
return false, err
85+
}
86+
if ogrnipArr[0] != 3 && ogrnipArr[0] != 4 {
87+
return false, ErrInvalidValue
88+
}
89+
code, _ := strconv.Atoi(ogrnip[:12])
90+
return ogrnipArr[len(ogrnip)-1] == code%13%10, nil
6491
}
6592

93+
// IsSNILSValid check
94+
// example valid format is `112-233-445 95`
6695
func IsSNILSValid(snils string) (bool, error) {
67-
return false, nil
96+
if len(snils) != 14 {
97+
return false, ErrInvalidSNILSLength
98+
}
99+
fSnils := strings.ReplaceAll(snils, "-", "")
100+
fSnils = strings.ReplaceAll(fSnils, " ", "")
101+
if len(snils) != 11 {
102+
return false, ErrInvalidFormattedSNILSLength
103+
}
104+
snilsArr, err := strToArr(fSnils)
105+
if err != nil {
106+
return false, err
107+
}
108+
hashSum := 0
109+
hashLen := len(snilsArr) - 2
110+
code, _ := strconv.Atoi(snils[hashLen:])
111+
for i, v := range snilsArr[:hashLen] {
112+
hashSum += v * (hashLen - i)
113+
}
114+
return hashSum%101 == code, nil
68115
}
69116

117+
// IsKPPValid
118+
// example valid format is
70119
func IsKPPValid(kpp string) (bool, error) {
71120
if len(kpp) == 9 {
72121
return true, nil

0 commit comments

Comments
 (0)