Skip to main content

Legal ID Validation

Validate Iranian legal entity identification numbers (شناسه حقوقی) used for companies and organizations.

Basic Usage

import { verifyIranianLegalId } from "@persian-tools/persian-tools";

console.log(verifyIranianLegalId("10320166911"));
// Output: true

console.log(verifyIranianLegalId("12345678901"));
// Output: false

API Reference

The 11-digit legal entity ID to validate
result
boolean
true if valid, false otherwise

Examples

Company Registration Validation

import { verifyIranianLegalId } from "@persian-tools/persian-tools";

interface CompanyValidation {
	isValid: boolean;
	errors: string[];
}

const validateCompany = (legalId: string): CompanyValidation => {
	const errors: string[] = [];

	if (!legalId || legalId.length !== 11) {
		errors.push("شناسه حقوقی باید ۱۱ رقم باشد");
	}

	if (!/^\d+$/.test(legalId)) {
		errors.push("شناسه حقوقی فقط باید شامل اعداد باشد");
	}

	if (!verifyIranianLegalId(legalId)) {
		errors.push("شناسه حقوقی نامعتبر است");
	}

	return {
		isValid: errors.length === 0,
		errors,
	};
};

console.log(validateCompany("10320166911"));
// { isValid: true, errors: [] }

B2B Platform Verification

import { verifyIranianLegalId } from "@persian-tools/persian-tools";

const verifyBusinessPartner = (companyData: { name: string; legalId: string }) => {
	if (!verifyIranianLegalId(companyData.legalId)) {
		throw new Error("شناسه حقوقی شرکت نامعتبر است");
	}

	return {
		verified: true,
		companyName: companyData.name,
		legalId: companyData.legalId,
	};
};

Form Validation

import { verifyIranianLegalId, digitsFaToEn } from "@persian-tools/persian-tools";

const validateLegalIdInput = (input: string): boolean => {
	// Convert Persian digits to English
	const normalized = digitsFaToEn(input.trim());

	// Check length
	if (normalized.length !== 11) {
		return false;
	}

	// Validate checksum
	return verifyIranianLegalId(normalized);
};

console.log(validateLegalIdInput("۱۰۳۲۰۱۶۶۹۱۱"));
// true

Use Cases

Validate company information during B2B registration:
const registerBusiness = (data: any) => {
  if (!verifyIranianLegalId(data.legalId)) {
    throw new Error('شناسه حقوقی معتبر نیست');
  }
  // Proceed with registration
};
Verify legal IDs on invoices:
const validateInvoice = (invoice: any) => {
  const isValid = verifyIranianLegalId(invoice.sellerLegalId);
  if (!isValid) {
    throw new Error('شناسه حقوقی فروشنده نامعتبر است');
  }
};
Ensure tax-related documents have valid legal IDs:
const validateTaxDocument = (legalId: string) => {
  return {
    isValid: verifyIranianLegalId(legalId),
    message: verifyIranianLegalId(legalId)
      ? 'شناسه معتبر است'
      : 'شناسه نامعتبر است'
  };
};

Validation Algorithm

The Iranian legal ID uses an 11-digit format with a checksum digit calculated using a specific algorithm similar to the national ID validation.

Type Definition

function verifyIranianLegalId(legalId: string): boolean;
Legal IDs are 11 digits long, whereas personal national IDs are 10 digits long.