diff --git a/go.mod b/go.mod
index 6d05d75a80f3a2efd3aadad838d5e5921af7d1ef..de9ec15f7330b73b41780fd745bd326c43e24ba4 100644
--- a/go.mod
+++ b/go.mod
@@ -69,6 +69,7 @@ require (
 	github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+	github.com/dongri/phonenumber v0.1.6 // indirect
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/go-errors/errors v1.4.1 // indirect
 	github.com/go-logr/logr v1.4.2 // indirect
diff --git a/go.sum b/go.sum
index bd0354a882c929f30213fc0cfdbe1c18a464a611..fdef8661b544a331c5d515bfb3a941436fa3148e 100644
--- a/go.sum
+++ b/go.sum
@@ -97,6 +97,8 @@ github.com/dimuska139/go-email-normalizer/v2 v2.0.0 h1:LH41ypO4BFast9bc8hNu6YEkR
 github.com/dimuska139/go-email-normalizer/v2 v2.0.0/go.mod h1:2Gil1j/rfUKJ5BHc/uxxyRiuk3YTg6/C3D7dz7jVQfw=
 github.com/dlsniper/debugger v0.6.0 h1:AyPoOtJviCmig9AKNRAPPw5B5UyB+cI72zY3Jb+6LlA=
 github.com/dlsniper/debugger v0.6.0/go.mod h1:FFdRcPU2Yo4P411bp5U97DHJUSUMKcqw1QMGUu0uVb8=
+github.com/dongri/phonenumber v0.1.6 h1:qLikrBt6mvaY2lg3gBoZjbRPxD1CsDlvhgmb5PHThE8=
+github.com/dongri/phonenumber v0.1.6/go.mod h1:cuHFSstIxh6qh/Qs/SCV3Grb/JMYregBLuXELvSYmT4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
diff --git a/utils/utils.go b/utils/utils.go
index 2c8d90b67b7d07ebade73e53b227a7997d3591a3..733680d542b52835780ae1890c2a6ab3e35f3a8b 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	emailverifier "github.com/AfterShip/email-verifier"
 	normalizer "github.com/dimuska139/go-email-normalizer/v2"
+	"github.com/dongri/phonenumber"
 	"github.com/jinzhu/now"
 	"github.com/mohae/deepcopy"
 	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
@@ -59,6 +60,35 @@ func PointerToValue[V any](value *V) V {
 	return *new(V) // zero value of V
 }
 
+func ValidateAndFormatPhoneNumber(phoneNumber string) (isValid bool, formattedNumber string) {
+	countryAlpha2Code := ""
+
+	if strings.HasPrefix(phoneNumber, "+") {
+		formattedNumber = strings.TrimPrefix(phoneNumber, "+")
+		// If the number starts with a country code, get the country's alpha2 code from the number
+		i := phonenumber.GetISO3166ByNumber(formattedNumber, false)
+		if i.Alpha2 != "" {
+			countryAlpha2Code = i.Alpha2
+		}
+	} else {
+		// Parse as a South African number by default
+		formattedNumber = phonenumber.Parse(phoneNumber, "ZA")
+		if formattedNumber != "" {
+			// Get the country's alpha2 code from the number
+			i := phonenumber.GetISO3166ByNumber(formattedNumber, false)
+			if i.Alpha2 != "" {
+				countryAlpha2Code = i.Alpha2
+			}
+		}
+	}
+	
+	if countryAlpha2Code == "" {
+		return false, ""
+	}
+
+	return true, formattedNumber
+}
+
 func ValidateEmailAddress(email string, options ...map[string]string) (string, error) {
 	// To lower
 	cleanedEmail := strings.ToLower(strings.TrimSpace(email))