generacodicefiscale

package module
v1.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2023 License: LGPL-3.0 Imports: 6 Imported by: 1

README

Generazione codice fiscale in GO

package: github.com/squeeze69/generacodicefiscale

Disponibile come modulo

--- NON si danno garanzie ---

dipende dal package codicefiscale

Uso:

package main

import (
    "github.com/squeeze69/generacodicefiscale"
    "fmt"
    "log"
)

func main() {
    codicecitta,erc := generacodicefiscale.CercaComune("Milano")
    if erc != nil {
        log.Fatal(erc)
    }
    fmt.Println(codicecitta)
    cf,erg := generacodicefiscale.Genera("Cognome","Nome","M",codicecitta.Codice,"2017-05-1")
    if erg != nil {
        log.Fatal(erg)
    }
    fmt.Println(cf)
}

Note:

  • Per la corretta generazione del codice fiscale vengono rimossi gli accenti dalle vocali accentate, al momento sono supportate solo le "èéàùìò" (maiuscole o minuscole)

  • La ricerca del comune avviene tramite CercaComune ed il nome esatto della città (non importano spazi, vocali accentate od altri simboli, la chiave di ricerca viene "normalizzata")

  • Per ricerche più sofisticate, è a disposizione Cittacod []Cittacodice, definito in "comuni.go", è ordinato per "CoIdx", ottenuto rimuovendo gli accenti e tutto quel che non è un carattere alfabetico.

  • Per cercare la nazione, prego, iterare su Nazionecod []Nazionecodice, definito in "nazioni.go"

  • Se si vuole ri-scaricare l'elenco dei comuni e delle nazioni fate "go generate", se tutto andrà bene "nazioni.go" e "comuni.go" verranno rigenerati, anche se ==NON== è consigliato di farlo per la nazione, attualmente il file da cui venivano prese le informazioni è stato modificato togliendo i suddetti codici. Sto lavorando ad una soluzione.

  • Sono inclusi i comuni soppressi (diventati, nella maggior parte dei casi, frazioni), poiché il CF dovrebbe tenere conto dell'esistenza del comune al momento della nascita.

  • Un pezzo di codice interessante, Codici Fiscali a parte, per avere almeno un piccolo indizio di quanto sia comodo e potente GO, è la (brutta) funzione qua sotto scarica l'archivio zip (in memoria), poi fa una scansione dei file presenti finché non trova un file con ".csv" nel nome (potrebbe controllare che finisca per .csv, ma visto lo scopo molto preciso e l'uso di nomi stile windows/dos (nome.estensione), basta ed avanza), la funzione si trova in "scaricanazioni.go".

//leggiCSVinZIP : legge il primo csv contenuto in uno zip file scaricato al volo in memoria
func leggiCSVinZIP(url string) (data []byte, err error) {

    r, er := http.Get(url)
    if er != nil {
        log.Fatal(er)
    }
    defer r.Body.Close()
    tutto, er := io.ReadAll(r.Body)
    if er != nil {
        log.Fatal(er)
    }
    zipR, er := zip.NewReader(bytes.NewReader(tutto), int64(len(tutto)))
    if er != nil {
        log.Fatal(er)
    }

    // cerca il CSV
    for _, zipf := range zipR.File {
        if strings.Contains(strings.ToLower(zipf.Name), ".csv") {
            zf, er := zipf.Open()
            if er != nil {
                log.Fatal(er)
            }
            defer zf.Close()
            return io.ReadAll(zf)
        }
    }
    return nil, errors.New("non è stato trovato niente")
}

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var Comunecod = []Comunecodice{}/* 9860 elements not displayed */

Comunecod : codici dei comuni

View Source
var Nazionecod = []Nazionecodice{}/* 216 elements not displayed */

Nazionecod : array con i dati, nazione per nazione

Functions

func CercaComune

func CercaComune(a string) (*Comunecodice, *CFSearchError)

CercaComune all'interno dell'array - normalizza prima, per evitare problemi con spazi, simboli od altro in ingresso: nome del comune in uscita: voce dell'array relativa o nil se non trovato, errore: nil o CFSearchError se non trovato

func EliminaAccenti

func EliminaAccenti(s string) string

EliminaAccenti : elimina in maniera semplice gli accenti - solo sulle minuscole

func EstrazioneLettere

func EstrazioneLettere(s, tipo string) string

EstrazioneLettere : Estrae le lettere (3) per il cognome ed il nome, passare "nome" come tipo per il nome

Example
l := EstrazioneLettere("Carlo", "nome")
fmt.Println("Lettere:", l)
Output:

Lettere: CRL

func Normalizza

func Normalizza(s string) string

Normalizza : esegue alcune operazioni per permettere di confrontare i nomi in maniera agnostica dalle vocali

Types

type CFGenError

type CFGenError struct {
	// contains filtered or unexported fields
}

CFGenError : errore di generazione codice fiscale

func Genera

func Genera(cognome, nome, sesso, istatcitta, datadinascita string) (string, *CFGenError)

Genera : genera il codice fiscale Ingresso: cognome,nome,sesso (M/F),istatcitta:codice ISTAT della città,datadinascita in formato "AAAA-MM-DD"

func (*CFGenError) Error

func (c *CFGenError) Error() string

type CFSearchError

type CFSearchError struct {
	// contains filtered or unexported fields
}

CFSearchError errore nella ricerca

func (*CFSearchError) Error

func (r *CFSearchError) Error() string

type Comunecodice

type Comunecodice struct {
	Codice, Comune, Provincia, Targa, Regione, CoIdx string
	DataCessazione                                   string
}

Comunecodice : array con il codice istat del comune,il nome Provincia, SiglaTarga (se esiste, '-' altrimenti), Regione, DataCessazione : data di cessazione del comune 9999-12-31 se attivo usare time.Parse("2006-01-02", ...) CoIdx:Nome comune normalizzato per indice

type Nazionecodice

type Nazionecodice struct {
	Codice, Nazione, CodiceISO, CodiceISO3 string
}

Nazionecodice : array con il codice istat della nazione ed i relativi codici ISO

Directories

Path Synopsis
genera

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL