Home Show me the Code Validação de CPF e CNPJ em Go

Validação de CPF e CNPJ em Go

0
1
585

Talk is cheap, show me the code!

Função para validar um CPF em Go. Apenas passe o CPF como parâmetro e se o CPF for válido, o retorno será nil:

func ValidaCPF(cpf string) error {
cpf = strings.Replace(cpf, ".", "", -1)
cpf = strings.Replace(cpf, "-", "", -1)
if len(cpf) != 11 {
return errors.New("CPF inválido")
}
var eq bool
var dig string
for _, val := range cpf {
if len(dig) == 0 {
dig = string(val)
}
if string(val) == dig {
eq = true
continue
}
eq = false
break
}
if eq {
return errors.New("CPF inválido")
}
i := 10
sum := 0
for index := 0; index < len(cpf)-2; index++ {
pos, _ := strconv.Atoi(string(cpf[index]))
sum += pos * i
i--
}
prod := sum * 10
mod := prod % 11
if mod == 10 {
mod = 0
}
digit1, _ := strconv.Atoi(string(cpf[9]))
if mod != digit1 {
return errors.New("CPF inválido")
}
i = 11
sum = 0
for index := 0; index < len(cpf)-1; index++ {
pos, _ := strconv.Atoi(string(cpf[index]))
sum += pos * i
i--
}
prod = sum * 10
mod = prod % 11
if mod == 10 {
mod = 0
}
digit2, _ := strconv.Atoi(string(cpf[10]))
if mod != digit2 {
return errors.New("CPF inválido")
}
return nil
}

Veja no Playgound: https://play.golang.org/p/u_2I8Mvq4B

Função para validar um CNPJ em Go:

func validaCNPJ(cnpj string) error {
cnpj = strings.Replace(cnpj, ".", "", -1)
cnpj = strings.Replace(cnpj, "-", "", -1)
cnpj = strings.Replace(cnpj, "/", "", -1)
if len(cnpj) != 14 {
return errors.New("CNPJ inválido")
}
algs := []int{5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
var algProdCpfDig1 = make([]int, 12, 12)
for key, val := range algs {
intParsed, _ := strconv.Atoi(string(cnpj[key]))
sumTmp := val * intParsed
algProdCpfDig1[key] = sumTmp
}
sum := 0
for _, val := range algProdCpfDig1 {
sum += val
}
digit1 := sum % 11
if digit1 < 2 {
digit1 = 0
} else {
digit1 = 11 - digit1
}
char12, _ := strconv.Atoi(string(cnpj[12]))
if char12 != digit1 {
return errors.New("CNPJ inválido")
}
algs = append([]int{6}, algs...)
var algProdCpfDig2 = make([]int, 13, 13)
for key, val := range algs {
intParsed, _ := strconv.Atoi(string(cnpj[key]))
sumTmp := val * intParsed
algProdCpfDig2[key] = sumTmp
}
sum = 0
for _, val := range algProdCpfDig2 {
sum += val
}
digit2 := sum % 11
if digit2 < 2 {
digit2 = 0
} else {
digit2 = 11 - digit2
}
char13, _ := strconv.Atoi(string(cnpj[13]))
if char13 != digit2 {
return errors.New("CNPJ inválido")
}
return nil
}

Veja no Playground: https://play.golang.org/p/_hcgvD6ODp

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Veja Também

Busca binária em Go

Neste lightning talk, mostro uma estratégia de busca binária usando um algoritmo em Go. …