feat: user domain -- errors

This commit is contained in:
2025-09-02 16:38:12 +03:30
parent 5ea90d5c0e
commit 0e32d0d820
11 changed files with 195 additions and 1 deletions
+45
View File
@@ -0,0 +1,45 @@
package national
import (
"backend/pkg/errors"
"strconv"
"strings"
)
func IsValid(value string) (bool, error) {
valueCount := len(value)
if valueCount < 8 {
return false, errors.ErrNationalIDInvalid
}
if valueCount >= 8 && valueCount < 10 {
value = strings.Repeat("0", 10-valueCount) + value
}
var valueSlices []uint8
for _, s := range value {
i, err := strconv.ParseInt(string(s), 10, 8)
if err != nil {
return false, errors.ErrNationalIDInvalid
}
valueSlices = append(valueSlices, uint8(i))
}
s := calculateNationalIDNumbers(&valueSlices)
s %= 11
l := valueSlices[len(value)-1]
if (s < 2 && s != int(l)) || (s >= 2 && int(l) != 11-s) {
return false, errors.ErrNationalIDInvalid
}
return true, nil
}
func calculateNationalIDNumbers(valueSlices *[]uint8) (sum int) {
var i uint8
for i = 10; i >= 2; i-- {
sum += int(i * (*valueSlices)[10-i])
}
return sum
}
+15
View File
@@ -0,0 +1,15 @@
package phone
import (
"backend/pkg/errors"
"regexp"
)
func IsValid(value string) (bool, error) {
re := regexp.MustCompile(`^(?:0|\+98|0098)(\d{10})$`)
result := re.FindStringSubmatch(value)
if len(result) > 0 {
return true, nil
}
return false, errors.ErrPhoneInvalid
}