FireSoft.Core
10.0.21
dotnet add package FireSoft.Core --version 10.0.21
NuGet\Install-Package FireSoft.Core -Version 10.0.21
<PackageReference Include="FireSoft.Core" Version="10.0.21" />
<PackageVersion Include="FireSoft.Core" Version="10.0.21" />
<PackageReference Include="FireSoft.Core" />
paket add FireSoft.Core --version 10.0.21
#r "nuget: FireSoft.Core, 10.0.21"
#:package FireSoft.Core@10.0.21
#addin nuget:?package=FireSoft.Core&version=10.0.21
#tool nuget:?package=FireSoft.Core&version=10.0.21
FireSoft.Core
Libreria di base per lo sviluppo dei software di FIRESOFT ITALIA SRL: validazioni italiane, estensioni sui tipi di uso quotidiano, crittografia, tracciamento delle modifiche alle entità e contratti comuni per i repository.
Utilizzo privato. La libreria è realizzata per i prodotti FireSoft Italia e non è destinata alla distribuzione pubblica. Tutti i diritti riservati.
- Piattaforma: .NET 10.0
- Nullable reference types abilitati, implicit usings disabilitati
- Documentazione XML in italiano distribuita insieme al pacchetto
Cosa contiene
| Area | Contenuto |
|---|---|
Validations |
Codice fiscale (persone fisiche e giuridiche), partita IVA, IBAN, EAN-8, EAN-13, email, codice fiscale estero |
DataAnnotations |
Gli attributi corrispondenti alle validazioni, più obbligatorietà, lunghezza massima e numero di decimali |
Extensions |
Metodi di estensione su string, decimal, DateTime, object, DataRow, DataTable, Dictionary, IQueryable, HashSet, int, long, bool |
Helpers |
Crittografia, cifratura dei file, codici a barre, calcoli contabili, hashing delle password, interrogazione del servizio VIES, gestione di file e processi |
Services |
EntityUpdater e LoggedEntityUpdater per aggiornare le entità tracciandone le modifiche, DiscardableTaskService per le operazioni asincrone annullabili |
Repositories |
Interfacce del pattern repository, separate per operazione |
Entities, Loggers |
Interfacce marcatore delle entità di dominio e contratti di logging |
Signatures |
FesSignatureFormula: la formula FES5 dello SignatureHash della firma elettronica semplice, unica per chi registra la firma e per chi la verifica |
Note d'uso
Formula FES5 della firma elettronica
FesSignatureFormula è congelata: ogni firma raccolta resta verificabile solo finché la formula non cambia, e
una formula diversa avrà un prefisso diverso (FES6:).
BuildCanonicalAsync(connection, signatureId, transaction)legge la firma e il suo OTP dal database, a colonne esplicite. La connessione deve essere già aperta; se sulla connessione è aperta una transazione, va passata, o il provider rifiuta il comando. Restituiscenullse la firma non esiste o non ha l'OTP collegato.ComputeHash(canonical)dà il valore da salvare (FES5:più 44 caratteri di Base64);IsFes5eMatchesriconoscono e confrontano un valore salvato.- Ogni colonna ha un tipo atteso: un valore di tipo diverso fa lanciare
NotSupportedExceptioninvece di cambiare l'hash in silenzio.
Conversioni da stringa a numero
ToNumber, ToInt e ToLong leggono il separatore decimale dalla sua posizione — vale l'ultimo
punto o virgola, quelli prima sono separatori delle migliaia — e non dalle impostazioni della
postazione. Lo stesso testo si legge quindi allo stesso modo su qualunque PC.
"1234.56".ToNumber() // 1234,56
"1234,56".ToNumber() // 1234,56 la virgola di chi non segue la specifica
"1.234,56".ToNumber() // 1234,56
"1,234.56".ToNumber() // 1234,56 e la convenzione inglese
"12.50 KG".ToNumber() // 12,50 lettere e simboli vengono ignorati
"1.500".ToNumber() // 1,5 ambiguo per natura: vedi sotto
Per gli importi digitati esiste ToMoney, che vuole i decimali del campo:
"1.000".ToNumber() // 1 l'ultimo separatore è decimale
"1.000".ToMoney(0) // 1000 zero decimali: è delle migliaia
"1.000,50".ToMoney(0) // 1000,50 l'ultimo non ha tre cifre dopo: è decimale
"2.500".ToMoney(2) // 2,5 con due decimali il punto è decimale
Perché solo gli importi hanno il parametro. La differenza non è una convenzione, è il formato con cui i valori vengono scritti:
| formato | separatore delle migliaia | rileggendolo |
|---|---|---|
Format.Number(n) → 0.## |
mai | l'unico separatore è quello decimale: nessuna ambiguità |
Format.Currency(n) → #,##0.00 |
sì | 2.500 è ambiguo fra duemilacinquecento e due e mezzo |
Vale anche a zero decimali: Format.Number(0) scrive 2500, non 2.500. Per questo un campo
numerico si rilegge sempre con ToNumber(), mentre un campo importo vuole ToMoney(decimali).
Con 0 un separatore vale come migliaia solo se seguito da esattamente tre cifre, così un
decimale digitato per errore non viene scartato: 1.5 resta uno e mezzo. È il caso delle valute senza
centesimi — la corona ceca — dove 1.000 battuto in un campo importo è mille e non uno.
⚠️
ToMoneynon va usato per i dati che arrivano da fuori, nemmeno quando sono prezzi: il formato di un file lo decide chi lo scrive, non i decimali del nostro archivio. Per quelli si usaToNumber().
⚠️
ToNumberè il metodo inverso diToSql(): un valore formattato con quello e riletto con questo torna identico, in qualunque culture. Non era vero fino alla 10.0.16.
Gli stessi metodi esistono su object, comprese le versioni nullable, per le celle di un DataRow e i
valori di un JsonElement: da preferire a valore.ToString()!.ToNumber(), perché un valore già
numerico viene convertito direttamente invece di passare dalla sua rappresentazione testuale, che
seguirebbe la culture della postazione.
ToInt e ToLong non hanno il parametro: ciò che si legge come intero — identificativi, contatori,
anni, quantità di pezzi — non porta separatori delle migliaia. Per un importo intero di una valuta
senza centesimi si legge con ToMoney e si tronca: (int)testo.ToMoney(0).
Dalla 10.0.17 sono spariti
ToDecimalInvariant/ToIntInvariant/ToLongInvariant— leggevano"12,50"come 1250 e"1.234,56"come 0, e nessuno li usava — e con loroRounding.UseCurrentCultureOnConvertString, che decideva la lettura per l'intero processo a partire dai decimali dell'archivio: un XML di fatture veniva letto secondo la valuta configurata.
Crittografia
Cryptography.EncryptAuthenticated e DecryptAuthenticated usano AES-GCM, che rileva la manomissione
del testo cifrato. I metodi Encrypt, Decrypt ed EncodeToMd5 sono deprecati e conservati per la
sola lettura dei dati esistenti: il compilatore lo segnala.
FileCryptography cifra i file in streaming, ed è pensato per i backup di database, che possono pesare
diversi GB. Dalla versione 3 del formato ogni file porta in coda un tag HMAC-SHA256 che copre
intestazione e contenuto, così troncamenti e alterazioni vengono rilevati al ripristino.
I file nel formato precedente restano leggibili. Il contrario non vale: un file scritto nel formato 3 non può essere aperto da una versione della libreria antecedente alla 10.0.12.
Aggiornamento delle entità
EntityUpdater copia le proprietà da un oggetto all'altro; LoggedEntityUpdater fa lo stesso e compone
il testo dello storico delle modifiche. Entrambi assegnano il valore che ricevono, senza trasformarlo:
la stringa vuota resta tale e non diventa NULL. Se una colonna deve contenere NULL anziché una stringa
vuota, la conversione spetta al chiamante, che è l'unico a conoscerne la definizione.
Validazione della partita IVA
Per le partite IVA italiane viene verificata anche la cifra di controllo. Per gli altri paesi il controllo
è solo di forma, perché l'algoritmo varia da Stato a Stato: quando serve sapere se un identificativo esiste
davvero si interroghi il servizio VIES con Helpers.ViesQuery.
Compilazione
La cartella contiene più file di progetto, quindi i comandi dotnet richiedono di indicare quello su cui
operare:
dotnet build FireSoft.Core.csproj # compilazione
dotnet build FireSoft.Core.csproj -c Release # compilazione con offuscamento
dotnet test FireSoft.Core.sln # suite di test
dotnet pack FireSoft.Core.csproj # pacchetto NuGet
La configurazione Release applica l'offuscamento con .NET Reactor.
Problemi conosciuti
Nessuno aperto.
Il comportamento nei casi limite — conversioni fuori intervallo, valori vuoti, input malformati — è descritto nei commenti XML dei singoli metodi, che l'ambiente di sviluppo mostra al momento della chiamata.
Copyright © 2026 FIRESOFT ITALIA SRL
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on FireSoft.Core:
| Package | Downloads |
|---|---|
|
FireSoft.Win.Ui
Librerie di base FireSoft Italia Srl |
|
|
FireSoft.Data.SqlClient
Librerie per l'accesso all'Sql Server di FireSoft Italia Srl |
|
|
FireSoft.Web.Ui
Librerie per l'interfaccia grafica nelle web application di FireSoft Italia Srl |
|
|
FireSoft.Maui.Ui
Librerie per lo sviluppo di App Maui di FireSoft Italia Srl |
|
|
FireSoft.Web.Standard.Entity
Librerie per le gestioni standard nelle web application di FireSoft Italia Srl |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.21 | 236 | 10/24/2026 |
| 10.0.20 | 250 | 10/16/2026 |
| 10.0.19 | 370 | 9/4/2026 |
| 10.0.18 | 344 | 8/14/2026 |
| 10.0.16 | 140 | 8/14/2026 |
| 10.0.15 | 183 | 8/11/2026 |
| 10.0.14 | 145 | 8/11/2026 |
| 10.0.13 | 165 | 8/10/2026 |
| 10.0.12 | 178 | 7/29/2026 |
| 10.0.11 | 438 | 6/18/2026 |
| 10.0.10 | 624 | 5/12/2026 |
| 10.0.9 | 256 | 5/6/2026 |
| 10.0.8 | 269 | 3/23/2026 |
| 10.0.7 | 273 | 3/11/2026 |
| 10.0.6 | 243 | 2/28/2026 |
| 10.0.5 | 165 | 2/23/2026 |
| 10.0.4 | 168 | 2/22/2026 |
| 10.0.3 | 166 | 2/21/2026 |
| 10.0.2 | 390 | 1/20/2026 |
| 10.0.1 | 166 | 1/20/2026 |