package common import ( "errors" "regexp" ) // SmsProvider defines the interface for SMS providers type SmsProvider interface { SendCode(phone string, code string) error } var smsProviders = map[string]SmsProvider{} // RegisterSmsProvider registers an SMS provider by name func RegisterSmsProvider(name string, provider SmsProvider) { smsProviders[name] = provider } // SendSMS sends a verification code via the configured SMS provider func SendSMS(phone string, code string) error { if SMSProvider == "" { return errors.New("SMS provider not configured") } provider, ok := smsProviders[SMSProvider] if !ok { return errors.New("unknown SMS provider: " + SMSProvider) } return provider.SendCode(phone, code) } var chinesePhoneRegex = regexp.MustCompile(`^1[3-9]\d{9}$`) // IsValidPhone checks if the phone number is a valid Chinese mobile number func IsValidPhone(phone string) bool { return chinesePhoneRegex.MatchString(phone) }