2025-03-31 17:52:55 +02:00

85 lines
1.7 KiB
Go

package main
import (
"strings"
"unicode"
)
func dataEqual(a, b []Person) bool {
if len(a) != len(b) {
return false
}
for i := range a {
if !personEqual(a[i], b[i]) {
return false
}
}
return true
}
func personEqual(a, b Person) bool {
return a.FirstName == b.FirstName &&
a.LastName == b.LastName &&
a.Email == b.Email &&
a.InternalPhone == b.InternalPhone &&
a.Department == b.Department &&
phonesEqual(a.Phones, b.Phones)
}
func phonesEqual(a, b []Phone) bool {
if len(a) != len(b) {
return false
}
for i := range a {
if a[i] != b[i] {
return false
}
}
return true
}
func formatPhoneNumber(number string) string {
// Entferne alle Nicht-Ziffern
digits := strings.Map(func(r rune) rune {
if unicode.IsDigit(r) {
return r
}
return -1
}, number)
// Entferne führende Nullen
digits = strings.TrimLeft(digits, "0")
// Entferne den Länderprefix, falls vorhanden
countryPrefix := config.PhoneRules.Country.Prefix
if strings.HasPrefix(digits, countryPrefix) {
digits = digits[len(countryPrefix):]
}
// Füge eine führende "0" hinzu, wenn nicht vorhanden
if !strings.HasPrefix(digits, "0") {
digits = "0" + digits
}
return digits
}
func extractInternalNumber(phoneNumber string) string {
digits := formatPhoneNumber(phoneNumber)
for _, areaCode := range config.PhoneRules.Country.AreaCodes {
if strings.HasPrefix(digits[1:], areaCode) { // Ignoriere die führende 0
remaining := digits[1+len(areaCode):]
if strings.HasPrefix(remaining, config.PhoneRules.Country.InternalPrefix) {
return remaining[len(config.PhoneRules.Country.InternalPrefix):]
}
}
}
return ""
}
func normalizePhoneNumber(number string) string {
return formatPhoneNumber(number)
}