Igris/pkg/validate/national/validate.go

46 lines
905 B
Go

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
}