Core interfaces and algorithms for the Finova financial toolkit. Contains Mod97, Luhn, ISO 7064, and base models for IBAN/BIC/Card/Enterprise/NationalID validation. Zero dependencies.
$ dotnet add package Finova.CoreThe Offline Financial Validation Toolkit for .NET
IBAN · Payment References · Cards · VAT · Business Numbers
100% Offline | Zero Dependencies | Lightning Fast
Finova is a comprehensive offline financial validation library for .NET. It allows you to validate financial data (IBANs, Credit Cards, VAT numbers, Payment References) using official checksum algorithms (Luhn, Mod97, ISO 7064) and regex patterns directly on your server.
👉 Visit the Official Website for full documentation and feature details.
Important: Finova performs 100% offline validation. It does NOT contact external services, APIs, or banking networks.
What Finova Does (Offline):
What Finova Does NOT Do:
Fast, offline regex and checksum validation for European and International formats.
RF creditor references.+++XXX/XXXX/XXXXX+++)MustBeValidIban, MustBeValidBic, MustBeValidVat, MustBeValidPaymentReference, etc.AbstractValidator classes.Install via the NuGet Package Manager:
dotnet add package FinovaOr via the Package Manager Console:
Install-Package Finovausing Finova.Services;
// Validates format, checksum, and country-specific rules
// (Does NOT check if account exists)
bool isValid = EuropeIbanValidator.ValidateIban("BE68539007547034").IsValid;
if (isValid)
{
Console.WriteLine("IBAN structure is valid");
}using Finova.Core.PaymentCard;
// Validates checksum (Luhn) and detects brand
var result = PaymentCardValidator.Validate("4532123456789012");
if (result.IsValid)
{
Console.WriteLine($"Valid {result.Brand} Card"); // Output: Valid Visa Card
}using Finova.Generators;
using Finova.Core.PaymentReference;
var generator = new PaymentReferenceGenerator();
// Generate Belgian OGM (+++000/0012/34569+++)
string ogm = generator.Generate("123456", PaymentReferenceFormat.LocalBelgian);
// Generate ISO RF (RF89INVOICE2024)
string isoRef = generator.Generate("INVOICE2024", PaymentReferenceFormat.IsoRf);using FluentValidation;
using Finova.Extensions.FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
#### Option A: Dependency Injection (Recommended)
Register Finova in your `Program.cs`:
```csharp
using Finova.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Registers all validators (IBAN, VAT, Enterprise, PaymentReference, etc.)
builder.Services.AddFinova();
var app = builder.Build();Inject and use the validators in your services:
using Finova.Core.Vat;
using Finova.Core.Enterprise;
public class BusinessService
{
private readonly IVatValidator _vatValidator;
private readonly IEnterpriseValidator _enterpriseValidator;
public BusinessService(IVatValidator vatValidator, IEnterpriseValidator enterpriseValidator)
{
_vatValidator = vatValidator;
_enterpriseValidator = enterpriseValidator;
}
public void RegisterCompany(string vatNumber, string enterpriseNumber)
{
// Validates VAT format and checksum for any EU country
if (!_vatValidator.Validate(vatNumber).IsValid)
{
throw new Exception("Invalid VAT Number");
}
// Validates Enterprise Number (e.g., SIRET, KBO)
if (!_enterpriseValidator.Validate(enterpriseNumber).IsValid)
{
throw new Exception("Invalid Enterprise Number");
}
}
}You can also use the static helpers directly without DI:
using Finova.Services;
using Finova.Core.Enterprise;
// 1. Validate VAT Number (Auto-detects country)
bool isVatValid = EuropeVatValidator.Validate("FR12345678901").IsValid;
// 2. Validate Enterprise Number (Auto-detects country)
bool isEntValid = EuropeEnterpriseValidator.ValidateEnterpriseNumber("BE0123456789").IsValid;
// 3. Validate Specific Enterprise Type
bool isSiretValid = EuropeEnterpriseValidator.ValidateEnterpriseNumber(
"73282932000074",
EnterpriseNumberType.FranceSiret
).IsValid;using Finova.Countries.Europe.France.Validators; using Finova.Countries.Europe.Belgium.Validators;
// 1. Get detailed SIRET components (SIREN + NIC) var details = FranceSiretValidator.GetSiretDetails("73282932000074"); Console.WriteLine($"SIREN: {details.Siren}, NIC: {details.Nic}");
// 2. Format a Belgian Enterprise Number string formatted = BelgiumEnterpriseValidator.Format("0456789123"); // Output: 0456.789.123
-----
# 🗺️ Roadmap
Finova is strictly offline. Future updates focus on schema compliance, developer experience, and mathematical validation.
---
## ✅ v1.0.0 — Foundation *(Released)*
- Belgian payment references (OGM/VCS)
- ISO 11649 international references
- Comprehensive testing and CI/CD
---
## ✅ v1.1.0 — Core Expansion *(Released)*
- **IBAN Expansion:** Italy (IT) & Spain (ES) specific rules
- **BIC/SWIFT:** Structural format validation (ISO 9362)
- **Payment Cards:** Luhn Algorithm & Brand Detection (Visa/MC/Amex)
- **Reference Validator:** RF Creditor Reference (ISO 11649)
---
## ✅ v1.2.0 — European Unification *(Released)*
- **Finova.Europe:** Unified wrapper package for all SEPA countries
- **Smart Routing:** Auto-detect country rules via `EuropeValidator`
- **Extensions:** FluentValidation integration package (`Finova.Extensions.FluentValidation`)
---
## ✅ v1.3.0 — Corporate Identity *(Released)*
- **VAT Numbers:** EU VAT checksums (VIES offline syntax)
- **Enterprise Numbers:** French SIRET/SIREN, Belgian KBO/BCE
---
## 🔮 v1.4.0 — National Identifiers *(Planned)*
- **National IDs:** Netherlands KVK, Spain NIF/CIF
- **Modern Payment Strings:** EPC QR Code payload builder, Swiss QR parsing
---
## 🔮 v1.5.0 — Global Routing *(Future)*
- **USA:** ABA routing number checksums
- **Canada:** Transit number validation
- **Australia:** BSB number validation
---
## 🔭 Horizon *(Undetermined)*
- AI-assisted anomaly detection
-----
## 🤝 Contributing
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
## 📄 License
This project is licensed under the **MIT License**.
-----
**Made with ❤️ for the .NET Community**
[GitHub](https://github.com/fdivrusa/Finova) • [Issues](https://github.com/fdivrusa/Finova/issues)