From 37d2bdac1af3301a484cf891d51db1b5e0df9b5b Mon Sep 17 00:00:00 2001 From: Ronaldo Ropelatto Date: Wed, 30 Apr 2025 14:47:43 -0300 Subject: [PATCH] Fix unicode validation --- cpfcnpj.go | 3 +-- rg.go | 3 +-- util.go | 11 ++++++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/cpfcnpj.go b/cpfcnpj.go index d4032af..287ef59 100644 --- a/cpfcnpj.go +++ b/cpfcnpj.go @@ -4,7 +4,6 @@ import ( "bytes" "regexp" "strconv" - "unicode" ) // "Cadastro" will be used internally to define both CPF and CNPJ. @@ -85,7 +84,7 @@ func calcCadastroDigit(doc string, position int) string { func cleanCadastro(doc *string) { buf := bytes.NewBufferString("") for _, r := range *doc { - if unicode.IsDigit(r) || unicode.IsLetter(r) { + if isDigit(r) || ('A' <= r && r <= 'Z') { buf.WriteRune(r) } } diff --git a/rg.go b/rg.go index 0bbb00b..49892ec 100644 --- a/rg.go +++ b/rg.go @@ -4,7 +4,6 @@ import ( "bytes" "errors" "regexp" - "unicode" ) var ( @@ -60,7 +59,7 @@ func calcRGDigit(doc string) int { func cleanRG(doc *string) { buf := bytes.NewBufferString("") for _, r := range *doc { - if unicode.IsDigit(r) || r == 'X' || r == 'x' { + if isDigit(r) || r == 'X' || r == 'x' { buf.WriteRune(r) } } diff --git a/util.go b/util.go index de04e40..3cd25bc 100644 --- a/util.go +++ b/util.go @@ -2,13 +2,12 @@ package brdoc import ( "bytes" - "unicode" ) // allDigit checks if every rune in a given string is a digit. func allDigit(doc string) bool { for _, r := range doc { - if !unicode.IsDigit(r) { + if !isDigit(r) { return false } } @@ -25,7 +24,7 @@ func toInt(r rune) int { func cleanNonDigits(doc *string) { buf := bytes.NewBufferString("") for _, r := range *doc { - if unicode.IsDigit(r) { + if isDigit(r) { buf.WriteRune(r) } } @@ -57,3 +56,9 @@ func isFrom(uf UF, ufs []UF) bool { } return false } + +// isDigit is a simpler version of unicode.IsDigit: verifies whether a rune is +// a single digit number. +func isDigit(r rune) bool { + return '0' <= r && r <= '9' +}