qcc/internal/identity/number.go
Niko Marmeladkov 22e33f0e5f NormalizeNumber: accept numbers without + prefix
Strips all non-digit chars, removes leading 0, formats as +0 XXX YYY ZZZZ.
2026-06-30 15:17:19 +03:00

58 lines
1.1 KiB
Go

package identity
import (
"crypto/rand"
"fmt"
"math/big"
"strings"
)
func GenerateNumber(prefix string) string {
n1 := randInt(100, 999)
n2 := randInt(100, 999)
n3 := randInt(1000, 9999)
return fmt.Sprintf("%s %d %d %d", prefix, n1, n2, n3)
}
func randInt(min, max int) int {
n, _ := rand.Int(rand.Reader, big.NewInt(int64(max-min+1)))
return min + int(n.Int64())
}
func NormalizeNumber(s string) string {
s = strings.TrimSpace(s)
parts := strings.Fields(s)
if len(parts) == 4 && strings.HasPrefix(parts[0], "+") {
return fmt.Sprintf("%s %s %s %s", parts[0], parts[1], parts[2], parts[3])
}
var digits string
for _, r := range s {
if r >= '0' && r <= '9' {
digits += string(r)
}
}
n := len(digits)
if n >= 3 && digits[0] == '0' {
digits = digits[1:]
n--
}
if n == 9 {
return fmt.Sprintf("+0 %s %s %s", digits[:3], digits[3:6], digits[6:])
}
return s
}
func ValidateNumber(s string) bool {
parts := strings.Fields(s)
if len(parts) != 4 {
return false
}
if len(parts[0]) < 2 || parts[0][0] != '+' {
return false
}
return true
}