58 lines
1.1 KiB
Go
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
|
|
}
|