paemuri / brdoc

Brazilian docs validator for Go - CPF, CNPJ, CEP, RENAVAM, CNH and license plate!
The Unlicense
130 stars 28 forks source link

Implements phone validator #28

Open tiagompalte opened 10 months ago

tiagompalte commented 10 months ago

Implementação de validação de número de celular e de telefone, retornando o UF referente ao DDD do número.

https://github.com/paemuri/brdoc/issues/21

ArtusC commented 9 months ago

Opa, tudo bem @tiagompalte?

Eu estava dando uma olhada no seu código, você chegou a seguir alguma referência para a validação dos números de telefone? Outra dúvida, o seu código deveria validar também telefones residenciais?

Eu precisei fazer algo do tipo recentemente e segui esta referencia, que contém os padões para os números de telefone: https://www.teleco.com.br/num.asp

DIto isso, eu adicionei alguns testes e fiz algumas modificações no seu código a fim de seguir esse padrão.

Irei deixar essas modificações nesse comentário, a fim de que você avalie e veja se faz sentido implementá-las no seu PR :grin:

var mapDDD = map[string]FederativeUnit{ "61": DF, "62": GO, "64": GO, "65": MT, "66": MT, "67": MS, "82": AL, "71": BA, "73": BA, "74": BA, "75": BA, "77": BA, "85": CE, "88": CE, "98": MA, "99": MA, "83": PB, "81": PE, "87": PE, "86": PI, "89": PI, "84": RN, "79": SE, "68": AC, "96": AP, "92": AM, "97": AM, "91": PA, "93": PA, "94": PA, "69": RO, "95": RR, "63": TO, "27": ES, "28": ES, "31": MG, "32": MG, "33": MG, "34": MG, "35": MG, "37": MG, "38": MG, "21": RJ, "22": RJ, "24": RJ, "11": SP, "12": SP, "13": SP, "14": SP, "15": SP, "16": SP, "17": SP, "18": SP, "19": SP, "41": PR, "42": PR, "43": PR, "44": PR, "45": PR, "46": PR, "51": RS, "53": RS, "54": RS, "55": RS, "47": SC, "48": SC, "49": SC, }

// IsPhone verifies if phone is a phone or residential valid number and return UF from DDD. func IsPhone(phone string) (isValid bool, uf FederativeUnit) { if !cellPhoneRegexp.MatchString(phone) && !residencialPhoneRegexp.MatchString(phone) { isValid = false return }

cellPhoneGroups := cellPhoneRegexp.FindStringSubmatch(phone)
residencialPhoneGroups := residencialPhoneRegexp.FindStringSubmatch(phone)
var groups []string

if cellPhoneGroups == nil {
    groups = residencialPhoneGroups
} else {
    groups = cellPhoneGroups
}

groupDDD := 2
uf, isValid = mapDDD[groups[groupDDD]]

return

}

tiagompalte commented 9 months ago

Obrigado pela contribuição @ArtusC Código mergeado