Skip to content

Commit d321dbe

Browse files
committed
add
1 parent 433ea8e commit d321dbe

File tree

13 files changed

+384
-102
lines changed

13 files changed

+384
-102
lines changed

bik/bik.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ func Exists(bik string) (bool, error) {
4242

4343
// Generate method generate a valid BIK code, but possible usaged or not usaged in reality.
4444
// Method guaranteed that code will be valid, but not guaranteed that code will be exists.
45-
func Generate(opts ...GenerateOpt) string {
46-
return NewBIK(opts...).String()
45+
func Generate() string {
46+
return NewBIK().String()
4747
}

fts/fts.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ type TaxRegionCode struct {
4646
serviceNumber RegionTaxServiceNumber
4747
}
4848

49+
func (trc *TaxRegionCode) Ints() []int {
50+
if trc == nil {
51+
return nil
52+
}
53+
54+
res := make([]int, 0, subjectCodeLength+regionTaxServiceNumberLength)
55+
res = append(res, utils.CodeToInts(int(trc.subjectCode))...)
56+
res = append(res, utils.CodeToInts(int(trc.serviceNumber))...)
57+
58+
return res
59+
}
60+
4961
func (trc *TaxRegionCode) IsValid() bool {
5062
if trc == nil {
5163
return false

generate.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package docs_code
2+
3+
import (
4+
"github.com/sshaplygin/docs-code/bik"
5+
"github.com/sshaplygin/docs-code/inn"
6+
"github.com/sshaplygin/docs-code/kpp"
7+
)
8+
9+
type GenerateFunc func() string
10+
11+
func Generate(docType DocType) string {
12+
var callFunc GenerateFunc
13+
switch docType {
14+
case BIK:
15+
callFunc = bik.Generate
16+
case INN:
17+
callFunc = inn.Generate
18+
case KPP:
19+
callFunc = kpp.Generate
20+
default:
21+
panic("not implemented method")
22+
}
23+
24+
if callFunc == nil {
25+
panic("not implemented method")
26+
}
27+
28+
return callFunc()
29+
}

generate_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package docs_code
2+
3+
import "testing"
4+
5+
func Test_Generate(t *testing.T) {
6+
7+
}

inn/errors.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package inn
2+
3+
import "errors"
4+
5+
var (
6+
// ErrNilINN try call methods for nil inn struct
7+
ErrNilINN = errors.New("nil inn struct")
8+
9+
// ErrInvalidCheckSumsValue invalid check sums rune value
10+
ErrInvalidCheckSumsValue = errors.New("invalid check sums rune value")
11+
)

inn/inn.go

Lines changed: 18 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,44 @@
11
package inn
22

33
import (
4-
"strconv"
5-
"strings"
4+
"fmt"
65

7-
"github.com/sshaplygin/docs-code/models"
86
"github.com/sshaplygin/docs-code/utils"
97
)
108

119
// Validate check to valid inn from input string.
1210
// example: input format is 7707083893
1311
func Validate(inn string) (bool, error) {
14-
if !IsCompany(inn) && !IsEntrepreneur(inn) {
15-
return false, &models.CommonError{
16-
Method: packageName,
17-
Err: models.ErrInvalidLength,
18-
}
19-
}
20-
21-
innArr, err := transformInn(inn)
12+
innData, err := ParseINN(inn)
2213
if err != nil {
23-
return false, err
24-
}
25-
if len(inn) == 10 {
26-
return hash10(innArr) == innArr[len(innArr)-1], nil
14+
return false, fmt.Errorf("parse %s model: %w", packageName, err)
2715
}
2816

29-
return hash11(innArr) == innArr[len(innArr)-2] && hash12(innArr) == innArr[len(innArr)-1], nil
17+
return innData.IsValid()
3018
}
3119

32-
// Generate generate random type inn string value.
20+
// Generate generate random type inn string value
3321
func Generate() string {
34-
if utils.RandomDigits(1)%2 == 1 {
35-
return GeneratePhysical()
36-
}
37-
38-
return GenerateLegal()
22+
return NewINN(INNType(utils.RandomDigits(1) % 3)).String()
3923
}
4024

41-
// IsEntrepreneur check inn for Entrepreneur type
42-
func IsEntrepreneur(inn string) bool {
43-
return len(inn) == lengthPhysical
44-
}
45-
46-
// IsCompany check inn for Company type
47-
func IsCompany(inn string) bool {
48-
return len(inn) == lengthLegal
49-
}
50-
51-
// GenerateLegal generate legal type inn string value.
25+
// GenerateLegal generate legal type inn string value
5226
func GenerateLegal() string {
53-
inn := strconv.FormatInt(utils.RandomDigits(9), 10)
54-
innArr, _ := transformInn(inn)
27+
// inn := strconv.FormatInt(utils.RandomDigits(9), 10)
28+
// innArr, _ := transformInn(inn)
5529

56-
return inn + strconv.Itoa(hash10(innArr))
30+
// return strings.Join([]string{inn, strconv.Itoa(hash10(innArr))}, "")
31+
return NewINN(INNType(utils.RandomDigits(1)%2 + 1)).String()
5732
}
5833

59-
// GeneratePhysical generate physical type inn string value.
34+
// GeneratePhysical generate physical type inn string value
6035
func GeneratePhysical() string {
61-
inn := strconv.FormatInt(utils.RandomDigits(10), 10)
62-
innArr, _ := transformInn(inn)
63-
64-
hash1Num := hash11(innArr)
65-
innArr = append(innArr, hash1Num)
36+
// inn := strconv.FormatInt(utils.RandomDigits(10), 10)
37+
// innArr, _ := transformInn(inn)
6638

67-
return strings.Join([]string{
68-
inn,
69-
strconv.Itoa(hash1Num),
70-
strconv.Itoa(hash12(innArr)),
71-
}, "")
72-
}
73-
74-
func transformInn(inn string) ([]int, error) {
75-
innNumbers := strings.Split(inn, "")
76-
innArr := make([]int, 0, len(inn))
77-
78-
for _, str := range innNumbers {
79-
number, err := strconv.Atoi(str)
80-
if err != nil {
81-
return nil, models.ErrInvalidValue
82-
}
83-
innArr = append(innArr, number)
84-
}
85-
86-
return innArr, nil
87-
}
88-
89-
func hash10(innArr []int) int {
90-
return ((2*innArr[0] + 4*innArr[1] + 10*innArr[2] + 3*innArr[3] +
91-
5*innArr[4] + 9*innArr[5] + 4*innArr[6] + 6*innArr[7] + 8*innArr[8]) % 11) % 10
92-
}
93-
94-
func hash11(innArr []int) int {
95-
return ((7*innArr[0] + 2*innArr[1] + 4*innArr[2] + 10*innArr[3] + 3*innArr[4] +
96-
5*innArr[5] + 9*innArr[6] + 4*innArr[7] + 6*innArr[8] + 8*innArr[9]) % 11) % 10
97-
}
39+
// hash1Num := hash11(innArr)
40+
// innArr = append(innArr, hash1Num)
9841

99-
func hash12(innArr []int) int {
100-
return ((3*innArr[0] + 7*innArr[1] + 2*innArr[2] + 4*innArr[3] +
101-
10*innArr[4] + 3*innArr[5] + 5*innArr[6] + 9*innArr[7] + 4*innArr[8] +
102-
6*innArr[9] + 8*innArr[10]) % 11) % 10
42+
// return strings.Join([]string{inn, strconv.Itoa(hash1Num), strconv.Itoa(hash12(innArr))}, "")
43+
return NewINN(INNType(Physical)).String()
10344
}

inn/inn_test.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@ func TestValidate(t *testing.T) {
3434
},
3535
{
3636
Code: "7707083893",
37-
Error: nil,
3837
IsValid: true,
3938
},
4039
{
4140
Code: "526317984689",
42-
Error: nil,
4341
IsValid: true,
4442
},
4543
}
@@ -70,23 +68,19 @@ func TestValidate(t *testing.T) {
7068
IsValid: false,
7169
},
7270
{
73-
Code: "98754321N123",
74-
Error: models.ErrInvalidValue,
75-
IsValid: false,
71+
Code: "98754321N123",
72+
Error: models.ErrInvalidValue,
7673
},
7774
{
78-
Code: "9854132d1123",
79-
Error: models.ErrInvalidValue,
80-
IsValid: false,
75+
Code: "9854132d1123",
76+
Error: models.ErrInvalidValue,
8177
},
8278
{
8379
Code: "7707083893",
84-
Error: nil,
8580
IsValid: true,
8681
},
8782
{
8883
Code: "526317984689",
89-
Error: nil,
9084
IsValid: true,
9185
},
9286
}
@@ -113,9 +107,9 @@ func TestGenerate(t *testing.T) {
113107
for i := 0; i < 10; i++ {
114108
inn = GenerateLegal()
115109
isValid, err := Validate(inn)
110+
require.NoError(t, err)
116111

117112
require.True(t, isValid)
118-
require.NoError(t, err)
119113
}
120114
})
121115

@@ -125,9 +119,9 @@ func TestGenerate(t *testing.T) {
125119
for i := 0; i < 10; i++ {
126120
inn = GeneratePhysical()
127121
isValid, err := Validate(inn)
122+
require.NoError(t, err)
128123

129124
require.True(t, isValid)
130-
require.NoError(t, err)
131125
}
132126
})
133127

@@ -137,13 +131,13 @@ func TestGenerate(t *testing.T) {
137131
for i := 0; i < 10; i++ {
138132
inn = Generate()
139133
isValid, err := Validate(inn)
134+
require.NoError(t, err)
140135

141136
require.True(t, isValid)
142-
require.NoError(t, err)
143137
}
144138
})
145139

146-
t.Run("generate random digits ", func(t *testing.T) {
140+
t.Run("generate random digits", func(t *testing.T) {
147141
tests := []struct {
148142
len int
149143
min int64

0 commit comments

Comments
 (0)