ind-utils-pro
v1.2.0
Published
A comprehensive, production-ready Indian utility library with 110+ regex patterns and 105+ validation/formatting methods
Downloads
17
Maintainers
Readme
🇮🇳 Ind-Utils-Pro
A comprehensive, production-ready Indian utility library with 110+ regex patterns, 105+ validation/formatting methods, and zero dependencies for modern JavaScript applications.
Author: Dhruv Gorasiya
License: MIT
Framework Agnostic: React • Vue • Angular • Node.js • Vanilla JS • Svelte • Next.js • Nuxt
📊 Quick Feature Matrix
| Feature | Count | Examples | |---------|-------|----------| | 🆔 Government IDs | 9 | PAN, GST, Aadhar, Passport, DL, Voter ID | | 🏦 Banking & Finance | 9 | IFSC, MICR, Account, SWIFT, IBAN, Cards | | 📞 Contact & Location | 8 | Mobile, Email, Pincode, Address, Coordinates | | 🌐 Internet & Web | 7 | URL, IPv4, IPv6, Email, JWT, Base64 | | 🚗 Vehicles | 6 | Registration, VIN, Chassis, Engine Number | | 💼 Business & Corporate | 6 | License, Trademark, Patent, FSSAI, Udyam | | 💳 Financial Instruments | 7 | Credit Card, Debit Card, CVV, IBAN, Currency | | 📊 Documents & Codes | 8 | Invoice, Bill, PO, Tracking, Barcode, QR | | 📅 Date & Time | 6 | Multiple formats + ISO timestamp | | 🔤 Text & Format | 20+ | Alphanumeric, Slug, Color, Percentage, etc. | | 📱 Social Media | 6 | Twitter, Instagram, Facebook, YouTube | | 💰 Currency Formatters | 40+ | INR, USD, EUR, GBP, JPY, AUD, CAD, SGD, HKD |
🚀 Installation
# npm
npm install ind-utils-pro
# yarn
yarn add ind-utils-pro
# pnpm
pnpm add ind-utils-pro
# bun
bun add ind-utils-pro📖 Quick Start
Basic Usage
import {
isValidPAN,
isValidGST,
toINR,
calculateGST
} from 'ind-utils-pro';
// Validate PAN
isValidPAN('ABCDE1234F'); // true
// Validate GST
isValidGST('24AAAAA0000A1Z5'); // true
// Format currency
toINR(15000); // ₹15,000.00
// Calculate tax
calculateGST(10000, 18); // 1800React Example
import { useForm } from 'react-hook-form';
import { isValidPAN, isValidGST, isValidMobile } from 'ind-utils-pro';
export function CompanyForm() {
const { register, handleSubmit, formState: { errors } } = useForm();
const validatePAN = (value) => isValidPAN(value) || 'Invalid PAN';
const validateGST = (value) => isValidGST(value) || 'Invalid GST';
const validateMobile = (value) => isValidMobile(value) || 'Invalid Mobile';
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input
{...register('pan', { validate: validatePAN })}
placeholder="Enter PAN"
/>
{errors.pan && <span>{errors.pan.message}</span>}
<input
{...register('gst', { validate: validateGST })}
placeholder="Enter GST"
/>
{errors.gst && <span>{errors.gst.message}</span>}
<input
{...register('mobile', { validate: validateMobile })}
placeholder="Enter Mobile"
/>
{errors.mobile && <span>{errors.mobile.message}</span>}
<button type="submit">Submit</button>
</form>
);
}Angular Example
import { Component } from '@angular/core';
import { isValidGST, calculateGST, toINR } from 'ind-utils-pro';
@Component({
selector: 'app-invoice',
template: `
<div class="invoice">
<p *ngIf="isGstValid" class="success">GST is valid</p>
<p>Base Amount: {{ baseAmount | currency }}</p>
<p>GST (18%): {{ gstAmount | currency }}</p>
<p>Total: {{ totalAmount | currency }}</p>
</div>
`,
})
export class InvoiceComponent {
gst = '24AAAAA0000A1Z5';
baseAmount = 10000;
gstAmount = 0;
totalAmount = 0;
isGstValid = false;
ngOnInit() {
this.isGstValid = isValidGST(this.gst);
this.gstAmount = calculateGST(this.baseAmount, 18);
this.totalAmount = this.baseAmount + this.gstAmount;
}
}Node.js / Express Example
const express = require('express');
const { isValidPincode, isValidMobile, toIndianWords } = require('ind-utils-pro');
const app = express();
app.post('/api/validate', (req, res) => {
const { pincode, mobile, amount } = req.body;
const isPincodeValid = isValidPincode(pincode);
const isMobileValid = isValidMobile(mobile);
const amountInWords = toIndianWords(amount);
res.json({
isPincodeValid,
isMobileValid,
amountInWords,
status: isPincodeValid && isMobileValid ? 'valid' : 'invalid'
});
});
app.listen(3000, () => console.log('Server running on port 3000'));🎯 Use Cases
1. E-Commerce Platforms
- ✅ Validate customer PAN/GST during registration
- ✅ Calculate and display GST in invoices
- ✅ Format prices in multiple currencies
- ✅ Validate payment card details
- ✅ Track shipments with tracking number validation
2. Financial Applications
- ✅ Bank account and IFSC code validation
- ✅ Multi-currency conversion and formatting
- ✅ Tax calculation and reporting
- ✅ Payment gateway integration
- ✅ Credit card validation with CVV/expiry
3. Business Management Systems
- ✅ Invoice and bill number generation/validation
- ✅ Purchase order tracking
- ✅ GST compliance verification
- ✅ Business document management
- ✅ Vendor/supplier validation (PAN, GSTIN)
4. Logistics & Delivery
- ✅ Vehicle registration number validation
- ✅ Tracking number validation
- ✅ Address and pincode verification
- ✅ Delivery partner contact validation
- ✅ Route optimization with coordinates
5. Government & Compliance
- ✅ Aadhar, PAN, Voter ID validation
- ✅ Passport and Driving License verification
- ✅ GST registration validation
- ✅ FSSAI license validation (food businesses)
- ✅ Udyam registration verification
6. Digital Services
- ✅ Email and URL validation
- ✅ Password strength validation
- ✅ JWT token validation
- ✅ Social media handle verification
- ✅ User registration form validation
7. Real Estate
- ✅ Address validation and standardization
- ✅ GPS coordinates validation
- ✅ Property document validation
- ✅ Payment processing with GST
- ✅ Owner/agent contact validation
8. Education & Enrollment
- ✅ Student email and contact validation
- ✅ Parent/Guardian mobile verification
- ✅ Address verification for enrollment
- ✅ Invoice generation for fees with GST
- ✅ Document tracking for admissions
📚 Complete API Reference
🆔 Identity & Government (9 validators)
isValidPAN(value: string): boolean // Pan card: ABCDE1234F
isValidGST(value: string): boolean // GST: 24AAAAA0000A1Z5
isValidAadhar(value: string): boolean // Aadhar: 12-digit number (prefix 2-9)
isValidAadharMasked(value: string): boolean // Masked Aadhar: XXXX XXXX XXXX
isValidVoterID(value: string): boolean // Voter ID: ABC1234567
isValidPassport(value: string): boolean // Passport: A1234567
isValidPassportIntl(value: string): boolean // International passport format
isValidDrivingLicense(value: string): boolean // Driving License: Full format
isValidDrivingLicenseSimple(value: string): boolean // Driving License: Simplified🏦 Banking & Finance (9 validators)
isValidIFSC(value: string): boolean // IFSC: SBIN0001234
isValidIFSCStandard(value: string): boolean // IFSC: Standard format
isValidMICR(value: string): boolean // MICR: 9-digit code
isValidBankAccount(value: string): boolean // 9-18 digit account numbers
isValidBankAccountFormatted(value: string): boolean // Formatted: 1234 5678 9012 3456
isValidTAN(value: string): boolean // TAN: AAAA01234A
isValidDIN(value: string): boolean // DIN: 8-digit number
isValidCIN(value: string): boolean // CIN: Corporate identity
isValidSwiftCode(value: string): boolean // SWIFT: SBIN INJU 010📞 Contact & Location (8 validators)
isValidMobile(value: string): boolean // Indian mobile: 10 digits (6-9 start)
isValidMobileWithCountry(value: string): boolean // With +91: +919876543210
isValidMobileIntl(value: string): boolean // International format
isValidPincode(value: string): boolean // Indian postal: 6 digits
isValidPincode6Digit(value: string): boolean // 6-digit format specifically
isValidLandline(value: string): boolean // Landline with STD code
isValidSTDCode(value: string): boolean // STD Code: 0XX, 0XXX, 0XXXX
isValidPhoneWithExtension(value: string): boolean // Extension format: 040-1234 x 123🌐 Email & Internet (7 validators)
isValidEmail(value: string): boolean // Basic email validation
isValidEmailStrict(value: string): boolean // RFC 5322 compliant
isValidURL(value: string): boolean // URL validation (http/https optional)
isValidURLStrict(value: string): boolean // Strict HTTPS requirement
isValidIPv4(value: string): boolean // IPv4: 192.168.1.1
isValidIPv6(value: string): boolean // IPv6: Full format
isValidIPv6Simple(value: string): boolean // IPv6: Simplified format🚗 Vehicle (6 validators)
isValidVehicleNo(value: string): boolean // Registration: GJ01AB1234
isValidVehicleNoNew(value: string): boolean // New format variant
isValidVIN(value: string): boolean // VIN: 17-character code
isValidChassisNumber(value: string): boolean // Chassis number
isValidEngineNumber(value: string): boolean // Engine number
isValidRCNumber(value: string): boolean // RC registration number💼 Business & Corporate (6 validators)
isValidCRN(value: string): boolean // Company Incorporation Number
isValidLicenseNumber(value: string): boolean // Business license
isValidTrademark(value: string): boolean // Trademark registration
isValidPatentNumber(value: string): boolean // Patent number
isValidFSSAI(value: string): boolean // Food Safety License: 14 digits
isValidUdyam(value: string): boolean // Udyam Registration: UDYAM format💳 Financial & Payment (7 validators)
isValidCreditCard(value: string): boolean // Credit card: 13-19 digits
isValidCreditCardFormatted(value: string): boolean // Formatted: 1234 5678 9012 3456
isValidDebitCard(value: string): boolean // Debit card: 16 digits
isValidCardCVV(value: string): boolean // CVV/CVC: 3-4 digits
isValidCardExpiry(value: string): boolean // Expiry: MM/YY format
isValidIFSCWithDash(value: string): boolean // IFSC with dash: SBIN-0001234
isValidIBAN(value: string): boolean // IBAN: International account📊 Documents & Codes (8 validators)
isValidGSTInvoice(value: string): boolean // GST Invoice: ABC12345678901234
isValidBillNumber(value: string): boolean // Bill: BLXXXXXXXX
isValidInvoiceNumber(value: string): boolean // Invoice: INVXXXXXXXX
isValidPurchaseOrder(value: string): boolean // PO: POXXXXXXXX
isValidReferenceCode(value: string): boolean // Reference: ABCXXXXXX
isValidTrackingNumber(value: string): boolean // Tracking: Alphanumeric
isValidBarcode128(value: string): boolean // Barcode 128 format
isValidQRCode(value: string): boolean // QR code string📅 Date & Time (6 validators)
isValidDateDDMMYYYY(value: string): boolean // DD/MM/YYYY or DD-MM-YYYY
isValidDateYYYYMMDD(value: string): boolean // YYYY/MM/DD or YYYY-MM-DD
isValidDateDDMMYY(value: string): boolean // DDMMYY compact format
isValidTimeHHMM(value: string): boolean // HH:MM (24-hour)
isValidTimeHHMMSS(value: string): boolean // HH:MM:SS
isValidTimestampISO(value: string): boolean // ISO 8601 timestamp🔤 Text & Format (20+ validators)
isAlphabetOnly(value: string): boolean // Letters and spaces
isAlphabetOnlyNoSpace(value: string): boolean // Letters only
isNumbersOnly(value: string): boolean // Digits only
isAlphanumeric(value: string): boolean // Letters + numbers
isAlphanumericUnderscore(value: string): boolean // + underscores
isAlphanumericDash(value: string): boolean // + dashes
isValidSlug(value: string): boolean // URL slug: abc-def-123
isValidHexColor(value: string): boolean // Hex color: #RRGGBB or #RGB
isValidRGBColor(value: string): boolean // rgb(255,255,255)
isValidRGBAColor(value: string): boolean // rgba(255,255,255,0.5)
isValidDecimalNumber(value: string): boolean // XX.XX format
isValidDecimalAmount(value: string): boolean // Amount with decimals
isValidPercentage(value: string): boolean // 0-100%🔐 Password & Security (5 validators)
isValidPasswordStrong(value: string): boolean // 8+ chars, mixed case, digit, symbol
isValidPasswordMedium(value: string): boolean // 8+ chars, mixed case, digit
isValidPasswordSimple(value: string): boolean // Min 8 characters
isValidJWT(value: string): boolean // JWT token format
isValidBase64(value: string): boolean // Base64 encoding📍 Address & Location (5 validators)
isValidAddress(value: string): boolean // Full mailing address
isValidLatitude(value: string): boolean // -90 to +90
isValidLongitude(value: string): boolean // -180 to +180
isValidCoordinates(value: string): boolean // Lat,Long pair
isValidZipCodeUS(value: string): boolean // US ZIP or ZIP+4📦 Product Codes (4 validators)
isValidUPC(value: string): boolean // UPC: 12 digits
isValidEAN(value: string): boolean // EAN: 13 digits
isValidISBN(value: string): boolean // ISBN book code
isValidGTIN(value: string): boolean // GTIN: 8-14 digits
isValidASIN(value: string): boolean // Amazon ASIN: 10-char
isValidSerialNumber(value: string): boolean // Product serial📱 Social Media (6 validators)
isValidTwitterHandle(value: string): boolean // @handle (1-15 characters)
isValidInstagramHandle(value: string): boolean // @handle (1-30 characters)
isValidFacebookID(value: string): boolean // Numeric FB ID
isValidYoutubeChannel(value: string): boolean // UC... format
isValidHashtag(value: string): boolean // #hashtag format
isValidMention(value: string): boolean // @mention format📏 Measurements (4 validators)
isValidWeightKg(value: string): boolean // 50kg, 50.5 kg format
isValidDistanceKm(value: string): boolean // 100km, 100.5 km format
isValidTemperature(value: string): boolean // 25°C, 77°F format
isValidCurrency(value: string): boolean // ₹, $, €, ¥ format💰 Currency & Formatting (40+ methods)
Indian Rupee Formatters
toINR(15000) // ₹15,000.00
toINRWithoutSymbol(15000) // 15,000.00
toINRCompact(15000000) // ₹1.5Cr
toINRCompact(1500000) // ₹15L
toINRCompact(1500) // ₹1.5KInternational Currency Formatters
toUSD(15000) // $15,000.00
toEUR(15000) // €15,000.00
toGBP(15000) // £15,000.00
toJPY(15000) // ¥15,000
toAUD(15000) // A$15,000.00
toCAD(15000) // C$15,000.00
toSGD(15000) // S$15,000.00
toHKD(15000) // HK$15,000.00
formatCurrency(15000, 'CHF', 'de') // Custom currency & localeNumber Formatting
formatDecimal(15000.5555, 2) // 15000.56
formatNumberWithCommas(15000) // 15,000
formatNumberWithCommasAndDecimals(15000, 2) // 15,000.00
formatDecimalAmount(15000, 2) // 15,000.00Percentage Formatting
formatPercentage(0.25, 2) // 25.00%
formatPercentageSimple(0.25) // 25%
formatPercentageChange(100, 125, 2) // +25.00%
formatPercentageChange(100, 75, 2) // -25.00%Amount Operations
formatAmount(15000, '₹') // ₹15000.00
formatAmountWithoutDecimals(15000, '$') // $15000
formatAmountInWords(5000) // Five Thousand Rupees OnlyTax & Discount Calculations
calculateGST(10000, 18) // 1800 (18% tax)
calculateGST(10000) // 1800 (default 18%)
calculateGSTInclusive(11800, 18) // {baseAmount: 10000, gst: 1800, total: 11800}
calculateDiscount(1000, 20) // 200 (20% off)
calculateDiscountedAmount(1000, 20) // 800 (final price)
calculateMarkup(500, 100) // 1000 (100% markup)
calculateMargin(1000, 500) // 50 (50% margin)Currency Conversion
// Convert 5000 INR to USD (1 USD = 83 INR)
convertCurrency(5000, 83, 1) // 60.24 USD
// Convert 5000 INR to EUR (1 EUR = 90 INR)
convertCurrency(5000, 90, 1) // 55.56 EURAmount Rounding
roundToNearest(15.6, 0.5) // 15.5
roundUp(15.1, 2) // 15.11
roundDown(15.9, 2) // 15.89Utility Functions
toIndianWords(5000) // Five Thousand Rupees Only
toIndianWords(1234567) // Twelve Lakh Thirty Four Thousand...
getAmountInPaisa(100) // 10000
getAmountInRupees(10000) // 100
isValidAmount(500) // true
isValidAmount('abc') // false
clampAmount(150, 0, 100) // 100 (clamped to max)🎨 Advanced Usage
Custom Pattern Validation
import { validateWithPattern } from 'ind-utils-pro';
const isPanValid = validateWithPattern('ABCDE1234F', 'PAN');
const isGstValid = validateWithPattern('24AAAAA0000A1Z5', 'GST');
const isEmailValid = validateWithPattern('[email protected]', 'EMAIL_STRICT');Direct Pattern Access
import { REGEX } from 'ind-utils-pro';
// Use regex patterns directly
if (REGEX.PAN.test(panValue)) {
console.log('Valid PAN');
}
// Create custom validators
const myValidator = (value) => REGEX.ALPHANUMERIC.test(value);TypeScript Types
import { REGEX } from 'ind-utils-pro';
type PatternKey = keyof typeof REGEX;
function validate(value: string, pattern: PatternKey): boolean {
return REGEX[pattern].test(value);
}📊 Real-World Examples
E-Commerce Invoice
import {
isValidGST,
calculateGST,
formatPercentageChange,
toINR
} from 'ind-utils-pro';
const invoice = {
seller: { gstin: '24AAAAA0000A1Z5' },
items: [
{ name: 'Product 1', price: 1000, qty: 2 },
{ name: 'Product 2', price: 500, qty: 1 }
],
discountPercent: 10
};
if (isValidGST(invoice.seller.gstin)) {
const subtotal = 2500; // calculated sum
const discount = 250; // 10% discount
const taxable = subtotal - discount; // 2250
const gst = calculateGST(taxable, 18); // 405
const total = taxable + gst; // 2655
console.log(`Subtotal: ${toINR(subtotal)}`);
console.log(`Discount: ${toINR(discount)}`);
console.log(`Taxable: ${toINR(taxable)}`);
console.log(`GST (18%): ${toINR(gst)}`);
console.log(`Total: ${toINR(total)}`);
console.log(`Margin: ${formatPercentageChange(subtotal, total)}`);
}Form Validation
import {
isValidPAN,
isValidGST,
isValidMobile,
isValidEmail,
isValidPincode
} from 'ind-utils-pro';
const formData = {
pan: 'ABCDE1234F',
gst: '24AAAAA0000A1Z5',
mobile: '9876543210',
email: '[email protected]',
pincode: '380001'
};
const isFormValid =
isValidPAN(formData.pan) &&
isValidGST(formData.gst) &&
isValidMobile(formData.mobile) &&
isValidEmail(formData.email) &&
isValidPincode(formData.pincode);
console.log('Form is valid:', isFormValid);Multi-Currency Pricing
import { convertCurrency, formatCurrency } from 'ind-utils-pro';
const priceINR = 15000;
const rates = { INR: 1, USD: 83, EUR: 90, GBP: 105 };
const prices = {
INR: priceINR,
USD: convertCurrency(priceINR, rates.INR, rates.USD),
EUR: convertCurrency(priceINR, rates.INR, rates.EUR),
GBP: convertCurrency(priceINR, rates.INR, rates.GBP)
};
console.log(formatCurrency(prices.INR, 'INR')); // ₹15,000.00
console.log(formatCurrency(prices.USD, 'USD')); // $180.72
console.log(formatCurrency(prices.EUR, 'EUR')); // €166.67
console.log(formatCurrency(prices.GBP, 'GBP')); // £142.86🧪 Testing
import { isValidPAN, isValidGST, toINR, calculateGST } from 'ind-utils-pro';
describe('Ind-Utils-Pro Validators', () => {
test('should validate PAN correctly', () => {
expect(isValidPAN('ABCDE1234F')).toBe(true);
expect(isValidPAN('INVALID')).toBe(false);
});
test('should validate GST correctly', () => {
expect(isValidGST('24AAAAA0000A1Z5')).toBe(true);
expect(isValidGST('INVALID')).toBe(false);
});
test('should format currency correctly', () => {
expect(toINR(5000)).toBe('₹5,000.00');
expect(toINR(0)).toBe('₹0.00');
});
test('should calculate GST correctly', () => {
expect(calculateGST(10000, 18)).toBe(1800);
expect(calculateGST(10000)).toBe(1800); // Default 18%
});
});🌟 Key Benefits
✅ Zero Dependencies – Ultra-lightweight, no external packages
✅ Production Ready – Used in production applications
✅ Type Safe – Full TypeScript support with IntelliSense
✅ Framework Agnostic – Works with any JavaScript framework
✅ Indian Focused – Built for Indian business requirements
✅ Comprehensive – 110+ patterns, 105+ methods
✅ Easy to Use – Simple, intuitive API
✅ Well Documented – Extensive examples and use cases
✅ Performance – Optimized regex patterns
✅ Tree-Shakeable – Import only what you need
📦 Bundle Size
Minified: ~8 KB
Gzipped: ~3 KB🤝 Contributing
Contributions are welcome! Please feel free to submit issues and enhancement requests on GitHub.
Development
# Clone the repository
git clone https://github.com/DHRUV0021
# Install dependencies
npm install
# Build
npm run build
# Watch mode for development
npm run dev
# Run tests
npm test📝 License
MIT © 2024 Dhruv Gorasiya
See LICENSE file for details.
💬 Support
For issues, questions, or suggestions:
- 📌 Open an issue on GitHub
🎯 Roadmap
- [ ] Add regex pattern builder utility
- [ ] Add batch validation methods
- [ ] Add localization support
- [ ] Add form integration plugins (Formik, React Hook Form)
- [ ] Add CLI tool for testing patterns
- [ ] Add Web version (browser-ready)
- [ ] Add more international patterns
🙏 Acknowledgments
Built with ❤️ for the Indian developer community.
Made with ❤️ by Dhruv Gorasiya
📊 Statistics
- 110+ Regex patterns
- 105+ Validation & Formatting methods
- 0 Dependencies
- 40+ Currency formatters
- 20+ Framework compatible
Version: 1.0.0
License: MIT
Last Updated: March 25, 2024
