cnpj on the way
parent
08eaa08389
commit
5b31c05c53
|
@ -0,0 +1,65 @@
|
||||||
|
package cnpj
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
|
//Gets a string and formats is as CPF
|
||||||
|
func Format(s string) string {
|
||||||
|
raw := Strip(s)
|
||||||
|
ret := raw[0:2] + "." + raw[2:5] + "." + raw[5:8] + "/" + raw[8:12] + "-" + raw[12:14]
|
||||||
|
return ret
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Removes all non-digit symbols
|
||||||
|
func Strip(s string) string {
|
||||||
|
ret := ""
|
||||||
|
for _, v := range s {
|
||||||
|
if unicode.IsDigit(v) {
|
||||||
|
ret = ret + string(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
//Checks if verification digit are respected
|
||||||
|
func Check(s string) bool {
|
||||||
|
raw := Strip(s)
|
||||||
|
nums := make([]int, 0)
|
||||||
|
for _, v := range raw {
|
||||||
|
i, _ := strconv.Atoi(string(v))
|
||||||
|
nums = append(nums, i)
|
||||||
|
}
|
||||||
|
|
||||||
|
d1 := 0
|
||||||
|
mul := 5
|
||||||
|
for _, v := range nums[0 : len(nums)-2] {
|
||||||
|
d1 = d1 + (v * mul)
|
||||||
|
mul--
|
||||||
|
if mul == 2 {
|
||||||
|
mul = 9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mod1 := 11 - ((d1) % 11)
|
||||||
|
if mod1 > 10 {
|
||||||
|
mod1 = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
d2 := 0
|
||||||
|
mul = 6
|
||||||
|
for _, v := range nums[0 : len(nums)-2] {
|
||||||
|
d2 = d2 + (v * mul)
|
||||||
|
mul--
|
||||||
|
if mul == 2 {
|
||||||
|
mul = 9
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d2 = d2 + (mod1 * mul)
|
||||||
|
mod2 := 11 - ((d2) % 11)
|
||||||
|
if mod2 > 10 {
|
||||||
|
mod2 = 0
|
||||||
|
}
|
||||||
|
return mod1 == nums[len(nums)-2] && mod2 == nums[len(nums)-1]
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package cnpj
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestFormat(t *testing.T) {
|
||||||
|
log.Printf(Format("03794020685"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCheck(t *testing.T) {
|
||||||
|
for _, v := range []string{
|
||||||
|
"60.119.200/0001-90",
|
||||||
|
} {
|
||||||
|
ret := Check(v)
|
||||||
|
log.Printf("%s=>%v", v, ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue