Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇮🇳 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); // 1800

React 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.5K

International 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 & locale

Number Formatting

formatDecimal(15000.5555, 2)        // 15000.56
formatNumberWithCommas(15000)       // 15,000
formatNumberWithCommasAndDecimals(15000, 2)   // 15,000.00
formatDecimalAmount(15000, 2)       // 15,000.00

Percentage 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 Only

Tax & 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 EUR

Amount Rounding

roundToNearest(15.6, 0.5)           // 15.5
roundUp(15.1, 2)                    // 15.11
roundDown(15.9, 2)                  // 15.89

Utility 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('test@example.com', '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: 'test@example.com',
  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

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages