A modern TypeScript utility library for Iranian applications. Includes Persian digit tools, Iranian phone utilities, national code validation, currency helpers, and Jalali date utilities.
Built for:
- Frontend apps
- Backend services
- Admin panels
- Fintech products
- E-commerce systems
- CRM dashboards
- Persian/Farsi applications
- ☀ Persian / Arabic / English digit conversion
- 📱 Iranian mobile & landline utilities
- 🔍 Iranian national code validation
- 💰 Rial / Toman formatting & conversion
- 📅 Jalali (Persian) date utilities
- 🔒 TypeScript support
- ⚡ Zero dependencies
- 🌍 Browser & Node.js compatible
- 🧪 Fully tested
npm install smart-persian-toolsyarn add smart-persian-toolspnpm add smart-persian-toolsimport {
toPersianDigits,
validateIranianPhoneNumber,
validateIranianNationalCode,
formatCurrency,
formatJalaliDate,
} from 'smart-persian-tools';
console.log(toPersianDigits(123456));
// ۱۲۳۴۵۶
console.log(validateIranianPhoneNumber('09121234567'));
// true
console.log(validateIranianNationalCode('0010350829'));
// true
console.log(formatCurrency(1500000));
// ۱٬۵۰۰٬۰۰۰ تومان
console.log(formatJalaliDate(new Date()));
// ۱۴۰۵/۰۲/۲۹Utilities for converting and detecting Persian, Arabic, and English digits.
import {
toPersianDigits,
toEnglishDigits,
containsPersianDigits,
containsEnglishDigits,
containsArabicDigits,
arabicToPersianDigits,
arabicToEnglishDigits,
normalizeDigits,
detectDigitType,
removeDigits,
extractDigits,
isDigitsOnly,
persianPadStart,
} from 'smart-persian-tools';toPersianDigits(123456);
// ۱۲۳۴۵۶toEnglishDigits('۱۲۳۴۵۶');
// 123456normalizeDigits('۱۲٣45');
// 12345detectDigitType('۱۲۳');
// persian
detectDigitType('123');
// english
detectDigitType('١٢٣');
// arabic
detectDigitType('۱۲3');
// mixedextractDigits('Phone: ۰۹۱۲۱۲۳۴۵۶۷');
// 09121234567persianPadStart(25, 4);
// ۰۰۲۵Utilities for Iranian mobile and landline numbers.
import {
normalizeIranianPhoneNumber,
validateIranianPhoneNumber,
formatIranianPhoneNumber,
getOperator,
isLandline,
isMobile,
getPhoneType,
getLandlineProvince,
toInternationalFormat,
toE164Format,
getPhoneInfo,
maskPhoneNumber,
isSamePhoneNumber,
extractPhoneNumbers,
} from 'smart-persian-tools';validateIranianPhoneNumber('09121234567');
// truenormalizeIranianPhoneNumber('+989121234567');
// 09121234567formatIranianPhoneNumber('09121234567');
// 0912-123-4567getOperator('09121234567');
// Hamrah AvaltoInternationalFormat('09121234567');
// +98 912 123 4567toE164Format('09121234567');
// +989121234567getPhoneInfo('09121234567');Returns:
{
original: '09121234567',
normalized: '09121234567',
formatted: '0912-123-4567',
isValid: true,
type: 'mobile',
operator: 'Hamrah Aval',
prefix: '0912',
province: null
}extractPhoneNumbers(`
Call me:
09121234567
or +989351112233
`);Returns:
[
'09121234567',
'09351112233'
]Iranian national code validation and formatting helpers.
import {
validateIranianNationalCode,
maskNationalCode,
formatNationalCode,
normalizeNationalCode,
getProvinceByNationalCode,
toPersianNationalCode,
isSameNationalCode,
isRepeatedDigits,
extractNationalCodes,
getNationalCodeInfo,
} from 'smart-persian-tools';validateIranianNationalCode('0010350829');
// trueformatNationalCode('0010350829');
// 001-035-0829maskNationalCode('0010350829');
// 001***0829normalizeNationalCode('۱۲۳۴۵۶۷۸۹');
// 0123456789toPersianNationalCode('0010350829');
// ۰۰۱۰۳۵۰۸۲۹extractNationalCodes(`
codes:
0010350829
0084575948
`);getNationalCodeInfo('0010350829');Returns:
{
code: '0010350829',
isValid: true,
formatted: '001-035-0829',
masked: '001***0829',
province: {
name: 'Tehran'
}
}Rial and Toman helpers for Iranian applications.
import {
rialToToman,
tomanToRial,
formatCurrency,
addCurrencySuffix,
toHumanReadable,
formatCurrencyHuman,
parseCurrencyString,
detectCurrency,
convertCurrency,
calculatePercent,
withTax,
withoutTax,
applyDiscount,
getCurrencyInfo,
} from 'smart-persian-tools';rialToToman(100000);
// 10000formatCurrency(1500000);
// ۱٬۵۰۰٬۰۰۰ تومانformatCurrencyHuman(2500000);
// ۲.۵ میلیون تومانparseCurrencyString('۱٬۵۰۰٬۰۰۰ تومان');
// 1500000detectCurrency('۵۰۰ هزار تومان');
// tomanapplyDiscount(1000000, 20);Returns:
{
amount: 800000,
saved: 200000
}getCurrencyInfo(1500000);Returns:
{
amount: 1500000,
currency: 'toman',
formatted: '۱٬۵۰۰٬۰۰۰ تومان',
humanReadable: '۱.۵ میلیون تومان',
inRial: 15000000,
inToman: 1500000
}Persian calendar and Jalali date helpers.
import {
getCurrentJalaliDate,
getPersianWeekday,
getPersianMonthName,
formatJalaliDate,
toJalaliDate,
formatJalaliPattern,
getJalaliSeason,
isIranianWeekend,
isIranianHoliday,
getDaysInJalaliMonth,
isJalaliLeapYear,
getRelativeJalaliDate,
getJalaliDateInfo,
getJalaliMonthRange,
jalaliDateDiff,
} from 'smart-persian-tools';getCurrentJalaliDate();
// ۱۴۰۵/۰۲/۲۹toJalaliDate(new Date('2024-03-20'));Returns:
{
year: 1403,
month: 1,
day: 1
}formatJalaliPattern(
new Date(),
'WD DD Month YYYY'
);
// دوشنبه ۲۹ اردیبهشت ۱۴۰۵getJalaliSeason(new Date());
// بهارisIranianHoliday(new Date('2024-03-20'));
// truegetRelativeJalaliDate(
new Date(Date.now() + 86400000)
);
// فرداgetJalaliDateInfo();Returns:
{
jalali: {
year: 1405,
month: 2,
day: 29
},
formatted: '۱۴۰۵/۰۲/۲۹',
monthName: 'اردیبهشت',
weekday: 'دوشنبه',
isHoliday: false,
isWeekend: false,
season: 'بهار'
}Fully written in TypeScript with complete type definitions.
import type {
Currency,
CurrencyInfo,
JalaliDate,
JalaliDateInfo,
PhoneInfo,
PhoneOperator,
PhoneType,
} from 'smart-persian-tools';- Node.js
- Bun
- Deno
- Browser
- React
- Next.js
- Vue
- Nuxt
- React Native
Contributions, issues, and feature requests are welcome.
git clone https://github.com/ArefOrumiehei/smart-persian-tools.gitnpm installnpm run testMIT © Aref Orumiehei