Tawfir.Toolkit
1.0.2
See the version list below for details.
dotnet add package Tawfir.Toolkit --version 1.0.2
NuGet\Install-Package Tawfir.Toolkit -Version 1.0.2
<PackageReference Include="Tawfir.Toolkit" Version="1.0.2" />
<PackageVersion Include="Tawfir.Toolkit" Version="1.0.2" />
<PackageReference Include="Tawfir.Toolkit" />
paket add Tawfir.Toolkit --version 1.0.2
#r "nuget: Tawfir.Toolkit, 1.0.2"
#:package Tawfir.Toolkit@1.0.2
#addin nuget:?package=Tawfir.Toolkit&version=1.0.2
#tool nuget:?package=Tawfir.Toolkit&version=1.0.2
Tawfir.Toolkit
A comprehensive .NET utilities library containing validation attributes and helper classes for common operations including encryption, calculations, random generation, and validation (KSA ID, Email, etc.).
Installation
dotnet add package Tawfir.Toolkit
Features
- Validation Attributes: KSA ID, Saudi National ID, Non-Saudi Iqama, and Email validation attributes
- Static Validators: Programmatic validation methods for all validation types
- Helper Classes: Encryption, financial calculations, card expressions, and random generation
- Regex Patterns: Pre-defined regex patterns for common validations
Validation Attributes
KsaId
Use as a validation attribute for any KSA ID (Saudi or Non-Saudi):
using Tawfir.Toolkit.Validator;
using System.ComponentModel.DataAnnotations;
public class UserModel
{
[KsaId(ErrorMessage = "Invalid KSA ID")]
public string KsaIdNumber { get; set; }
// Or use with Required attribute
[Required]
[KsaId(ErrorMessage = "KSA ID is required and must be valid")]
public string NationalId { get; set; }
}
The attribute validates:
- 10-digit format
- Correct prefix (1 for Saudi, 2 for Non-Saudi)
- Checksum algorithm validity
SaudiNationalId
Use specifically for Saudi National Id numbers (must start with 1):
using Tawfir.Toolkit.Validator;
using System.ComponentModel.DataAnnotations;
public class SaudiUserModel
{
[SaudiNationalId(ErrorMessage = "Invalid Saudi National Id")]
public string SaudiNationalIdNumber { get; set; }
// Or use with Required attribute
[Required(ErrorMessage = "Saudi National Id is required")]
[SaudiNationalId(ErrorMessage = "Must be a valid Saudi National Id starting with 1")]
public string NationalId { get; set; }
}
The SaudiNationalId attribute validates:
- All standard Civil ID validations (format, checksum)
- Additional check: Must start with digit
1(Saudi nationals only)
NonSaudiIqama
Use specifically for Non-Saudi Iqama numbers (must start with 2):
using Tawfir.Toolkit.Validator;
using System.ComponentModel.DataAnnotations;
public class NonSaudiUserModel
{
[NonSaudiIqama(ErrorMessage = "Invalid Non-Saudi Iqama")]
public string IqamaNumber { get; set; }
// Or use with Required attribute
[Required(ErrorMessage = "Non-Saudi Iqama is required")]
[NonSaudiIqama(ErrorMessage = "Must be a valid Non-Saudi Iqama starting with 2")]
public string IqamaId { get; set; }
}
The NonSaudiIqama attribute validates:
- All standard Civil ID validations (format, checksum)
- Additional check: Must start with digit
2(Non-Saudi nationals only)
Use for email address validation:
using Tawfir.Toolkit.Validator;
using System.ComponentModel.DataAnnotations;
public class UserModel
{
[Email(ErrorMessage = "Invalid email address")]
public string EmailAddress { get; set; }
// Or use with Required attribute
[Required(ErrorMessage = "Email is required")]
[Email(ErrorMessage = "Must be a valid email address")]
public string ContactEmail { get; set; }
}
The Email attribute validates:
- Valid email format using regex pattern
- Standard email format requirements
Note: All attributes allow null/empty values by default. Use [Required] if the field is mandatory.
Static Validator Methods
You can also validate programmatically:
using Tawfir.Toolkit.Validator;
// Validate any Civil ID (Saudi or Non-Saudi)
bool isValid = KsaIdValidator.IsValid("1234567890");
// Validate specifically for Saudi National Id (must start with 1)
bool isSaudiValid = KsaSaudiNationalIdValidator.IsValid("1234567890");
// Validate specifically for Non-Saudi Iqama (must start with 2)
bool isNonSaudiValid = KsaNonSaudiIqamaValidator.IsValid("2234567890");
// Validate email address
bool isValidEmail = EmailValidator.IsValid("user@example.com");
Helper Classes
EncryptionHelper
Encrypt and decrypt strings:
using Tawfir.Toolkit.Helpers;
var encrypted = EncryptionHelper.Encrypt("sensitive data");
var decrypted = EncryptionHelper.Decrypt(encrypted);
CardExpression
Card number processing:
using Tawfir.Toolkit.Helpers;
string issuerCardRefId = CardExpression.GetIssuerCardRefId(cardNo, expiryDate);
string cardNumber = CardExpression.GetCardNumber(issuerCardRefId);
APRCalculationHelper
Financial calculations for APR (Annual Percentage Rate):
using Tawfir.Toolkit.Helpers;
double apr = APRCalculationHelper.GetAPRValueBaseeta(amount, tenure, rate, date);
double pmt = APRCalculationHelper.GetPMTCompound(pv, per, r);
double pmtFlat = APRCalculationHelper.GetPMTFlat(pv, pa, per, r);
RandomGen
Generate random strings and numbers:
using Tawfir.Toolkit.Helpers;
string randomString = RandomGen.String(length: 10);
string numbersOnly = RandomGen.String(length: 6, NumbersOnly: true);
int randomInt = RandomGen.INT(from: 1, to: 100);
Regex Patterns (RegexExp)
Pre-defined regex patterns for common validations:
using Tawfir.Toolkit.Models;
using System.Text.RegularExpressions;
// Civil ID patterns
Regex.IsMatch(id, RegexExp.Saudi); // Saudi National ID (starts with 1)
Regex.IsMatch(id, RegexExp.NonSaudi); // Non-Saudi Iqama (starts with 2)
Regex.IsMatch(id, RegexExp.CivilId); // Any Civil ID (starts with 1 or 2)
// Financial patterns
Regex.IsMatch(iban, RegexExp.IBAN); // Saudi IBAN format
// Contact patterns
Regex.IsMatch(mobile, RegexExp.Mobile); // Saudi mobile (05XXXXXXXX)
Regex.IsMatch(phone, RegexExp.Phone); // Saudi phone (01XXXXXXXX)
// Security patterns
Regex.IsMatch(password, RegexExp.Password); // Strong password
Regex.IsMatch(pin, RegexExp.PIN); // 6-character PIN
Regex.IsMatch(pin, RegexExp.PINCC); // 4-character PIN
Regex.IsMatch(otp, RegexExp.OTP); // OTP code
// Date patterns
Regex.IsMatch(date, RegexExp.Date_G); // Gregorian date (DD/MM/YYYY)
Regex.IsMatch(date, RegexExp.Date_H); // Hijri date (DD/MM/YYYY)
// Text patterns
Regex.IsMatch(text, RegexExp.Alphabetical); // Alphabetical with Arabic support
Regex.IsMatch(text, RegexExp.Alphabetical_En); // English only
Regex.IsMatch(text, RegexExp.Alphabetical_AR); // Arabic only
Namespaces
Tawfir.Toolkit.Validator- Validation attributes and static validatorsTawfir.Toolkit.Helpers- Helper classes for common operationsTawfir.Toolkit.Models- Models and constants (e.g., RegexExp)
Requirements
- .NET 9.0 or higher
License
MIT
Support
For support, please contact:
- Email: info@waelelazizy.com
- Phone: 00973 33030730
Author
wael EL azizy - waelelazizy.com
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
-
net9.0
- Newtonsoft.Json (>= 13.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.19 | 141 | 5/3/2026 |
| 1.0.18 | 209 | 4/6/2026 |
| 1.0.17 | 116 | 4/5/2026 |
| 1.0.16 | 156 | 3/27/2026 |
| 1.0.15 | 131 | 3/15/2026 |
| 1.0.14 | 109 | 3/15/2026 |
| 1.0.13 | 116 | 3/15/2026 |
| 1.0.12 | 260 | 1/15/2026 |
| 1.0.11 | 121 | 1/14/2026 |
| 1.0.10 | 219 | 1/4/2026 |
| 1.0.9 | 317 | 12/16/2025 |
| 1.0.8 | 220 | 12/5/2025 |
| 1.0.7 | 229 | 11/3/2025 |
| 1.0.6 | 230 | 11/3/2025 |
| 1.0.5 | 244 | 11/3/2025 |
| 1.0.4 | 226 | 11/3/2025 |
| 1.0.3 | 233 | 11/3/2025 |
| 1.0.2 | 232 | 11/3/2025 |
Initial release with validation attributes and helper classes