-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfrontacodicifiscali.go
85 lines (77 loc) · 2.37 KB
/
confrontacodicifiscali.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package codicefiscale
import "strings"
/*
Confronto Codici Fiscali
Versione: 1.0
Data: 1/5/2017
Autore: Squeeze69
Licenza: LGPL
Porting basato sulle informazioni pubblicate da Umberto Salsi su Icosaedro:
sito web: http://www.icosaedro.it/cf-pi/index.html
package: https://github.com/squeeze69/codicefiscale
con go: go get github.com/squeeze69/codicefiscale
*/
// caratteri da modificare, base 1: 7, 8, 10, 11, 13, 14, 15
var omcndx = map[int]bool{
6: true, 7: true, 9: true, 10: true, 12: true, 13: true, 14: true,
}
// mappatura per invertire trasformazioni in caso di omocodie
var omc = map[rune]string{
'L': "0", 'M': "1", 'N': "2", 'P': "3", 'Q': "4",
'R': "5", 'S': "6", 'T': "7", 'U': "8", 'V': "9",
}
// Deomocodia inverte le variazioni per omocodie, assume un codice fiscale valido, tutte le lettere maiuscole
// vocali accentate convertite con vocali non accentate
func Deomocodia(s string) string {
var s2 string
for i, c := range s[0:15] {
if _, ok := omcndx[i]; ok {
if v, vb := omc[c]; vb {
s2 = s2 + v
} else {
s2 = s2 + string(c)
}
} else {
s2 = s2 + string(c)
}
}
return s2
}
// ConfrontaCodicifiscaliOmocodici : ingresso a,b, tiene conto di omocodie per confronto
// ingresso: a,b stringhe con i codici fiscali da confrontare
// se non corrispondono, riconduce entrambi alla forma non per omocodie e riconfronta
// uscita: bool (true:ok,false:ko), *CFError (nil se va bene)
// da sostituire: 7,8,10,11,13,14,15
func ConfrontaCodicifiscaliOmocodici(a, b string) (bool, *CFError) {
if _, err := CodiceFiscale(a); err != nil {
return false, err
}
if _, err := CodiceFiscale(b); err != nil {
return false, err
}
a = strings.ToUpper(a)
b = strings.ToUpper(b)
if a == b {
return true, nil
}
if Deomocodia(a)[0:15] != Deomocodia(b)[0:15] {
return false, errCFError("Non corrispondono")
}
return true, nil
}
// ConfrontaCodicifiscali : controlla e confronta due codici fiscali
// DEVONO corrispondere al 100% - prima verifica il codice di controllo
// Ingresso: a,b : string : codifici fiscali
// Uscita: bool (true:ok,false:ko), *CFError (nil se va bene)
func ConfrontaCodicifiscali(a, b string) (bool, *CFError) {
if _, err := CodiceFiscale(a); err != nil {
return false, err
}
if _, err := CodiceFiscale(b); err != nil {
return false, err
}
if strings.EqualFold(a, b) {
return true, nil
}
return false, errCFError("Non corrispondono")
}