Skip to the guide
All guides

الجوال والرمز البريدي ولوحة المركبة

تحقق من أرقام الجوال الإيرانية بكل صيغ الإدخال الشائعة، ومن الرموز البريدية ولوحات المركبات، مع تلميحات المشغّل والتحليل وحدود واضحة.

app RTLY-Kit 0.2.0checked reading 6 minutes

On this page

البدء السريع

PHP
<?php
require 'vendor/autoload.php';

use RtlyKit\Validation\Mobile;
use RtlyKit\Validation\PostalCode;
use RtlyKit\Validation\VehiclePlate;
use function RtlyKit\is_mobile;
use function RtlyKit\is_postal_code;
use function RtlyKit\is_vehicle_plate;

var_dump(is_mobile('+98 912 123 4567'));          // bool(true)
var_dump(is_postal_code('۱۲۳۴۵-۶۷۸۹۰'));          // bool(true)
var_dump(is_vehicle_plate('12ب345 ایران 67'));    // bool(true)

echo Mobile::getOperator('09121234567'), "\n";    // همراه اول

تطبّق الأدوات الثلاث جميعها عقد Validator المشترك. ودوالّها المساعدة هي validate_mobile() وvalidate_postal_code() وvalidate_vehicle_plate().

أرقام الجوال

الصيغ المقبولة

تُحوِّل Mobile كل شيء إلى الصيغة الوطنية 09xxxxxxxxx (11 رقمًا). وتقبل هذه الصيغ الخمس، بأرقام فارسية أو عربية، ومع مسافات أو شرطات أو أقواس مختلطة بها:

المُدخَلnormalized
0912123456709121234567
912123456709121234567
98912123456709121234567
+98912123456709121234567
0098912123456709121234567
۰۹۱۲ ۱۲۳ ۴۵۶۷09121234567
(0912) 123-456709121234567

تُبقي Mobile على الأرقام فقط، فيُحذف أي فاصل غير رقمي. ويُقبل أيضًا عدد صحيح مثل 9121234567؛ فليس فيه صفر بادئ يمكن أن يضيع، ولذلك يُقرأ على أنه الصيغة ذات الأرقام العشرة.

القاعدة

الصلاحية فحص للشكل: بعد التنظيف يجب أن يكون الرقم 09 يليه رقم من 0 إلى 4 أو 9، ثم ثمانية أرقام أخرى. وهذه هي الكتل من 090x إلى 094x و099x. وأي شيء آخر، مثل 0950... أو رقم من 10 أرقام، يُرجع invalid_format.

PHP
$r = Mobile::validate('09121234567');
echo json_encode($r->details(), JSON_UNESCAPED_UNICODE);
// {"normalized":"09121234567","operator":"همراه اول","allocated":true}

print_r(Mobile::validate('09501234567')->errors());   // [invalid_format]
print_r(Mobile::validate('0912123456')->errors());    // [invalid_format]
echo Mobile::normalize('+98 912 123 4567');           // 09121234567

تلميح المشغّل

تبحث details()['operator'] وMobile::getOperator() عن الرقم في جدول للبادئات المعروفة: همراه أول (0910-0919، 0990-0994)، وإيرانسل (0900-0905، 0930، 0933، 0935-0939)، ورايتل (0920-0923)، واسپادان (0931)، وتالية (0932)، وتله‌كيش (0934)، وشاتل موبايل (09981 و09982)، وآپتل (09991). وتُعتمد أطول بادئة مطابِقة. وإذا كان الرقم صالحًا وبادئته غير موجودة في الجدول فإن المشغّل null:

PHP
echo Mobile::getOperator('09351234567'), "\n";           // ایرانسل
echo Mobile::getOperator('09981234567'), "\n";           // شاتل موبایل
echo Mobile::getOperator('09991012345'), "\n";           // آپتل
var_dump(Mobile::validate('09951234567')->isValid());   // bool(true)
var_dump(Mobile::getOperator('09951234567'));            // NULL، صالح لكنه غير موجود في الجدول
var_dump(Mobile::getOperator('09501234567'));            // NULL، رقم غير صالح

تتيح خدمة نقل الرقم بين المشغّلين أن يحتفظ الناس بأرقامهم عند تغيير المشغّل. لذلك فالبادئة تلميح إلى المشغّل الأصلي، وليست وعدًا بالمشغّل الحالي. والكتل التي لا نملك لها مشغّلًا مؤكدًا (مثل 0940-0949 ومعظم 0995-0999) تُرجع null، مع أن الرقم يبقى صالحًا.

علامة التخصيص

لكل نتيجة صالحة أيضًا مفتاح allocated. قيمته true إذا وقعت البادئة في كتلة تدرجها خطة الترقيم الوطنية لخدمة الهاتف المحمول. وقد أودعت هيئة تنظيم الاتصالات هذه الخطة لدى الاتحاد الدولي للاتصالات (ITU) في 24 أغسطس 2026. وتُرجع Mobile::isAllocated() العلامة نفسها قيمةً bool، وتكون false لكل ما ليس رقمًا سليم الصياغة.

PHP
var_dump(Mobile::isAllocated('09121234567'));   // bool(true)
var_dump(Mobile::isAllocated('09951234567'));   // bool(false)، الشكل صالح لكن البادئة ليست في الخطة
var_dump(Mobile::isAllocated('09501234567'));   // bool(false)، رقم غير صالح
var_dump(Mobile::validate('09951234567')->details()['allocated']);   // bool(false)

القيمة allocated = false في نتيجة صالحة لا تجعل الرقم غير صالح. فقد تكون البادئة أحدث من الخطة الموجودة في بياناتنا، أو واقعة في كتلة مثل 0906-0909 أو 094x لا تعدّها الخطة للهاتف المحمول. والصلاحية تبقى فحص الشكل.

التفاصيل: normalized وoperator وallocated. مفاتيح الأخطاء الوحيدة هي invalid_format وinvalid_type وinput_too_long. ولا تُقبل أرقام الهاتف الثابت ولا الأرقام الدولية.

من المفيد أن تعرف. تؤكد خطة الترقيم أن البادئة مخصصة للهاتف المحمول، لكنها لا تذكر المشغّلين. أسماء المشغّلين مأخوذة من جداول عامة متفقة فيما بينها، ومن صفحات المشغّلين أنفسهم لإيرانسل وآپتل وشاتل موبايل. لا توجّه الرسائل النصية ولا الفوترة بحسب تلميح المشغّل. انظر الدقة والبيانات.

الرمز البريدي

يتكوّن الرمز البريدي الإيراني من 10 أرقام ولا يبدأ بالصفر أبدًا. تُبقي PostalCode على الأرقام فقط (تُحوَّل الأرقام الفارسية والعربية أولاً، ثم تُحذف الفواصل مثل المسافات والشرطات) وتفحص الطول والرقم الأول:

PHP
$r = PostalCode::validate('۱۲۳۴۵-۶۷۸۹۰');
echo json_encode($r->details());   // {"normalized":"1234567890"}

print_r(PostalCode::validate('12345')->errors());          // [invalid_length]
print_r(PostalCode::validate('123456789012')->errors());   // [invalid_length]
print_r(PostalCode::validate('0123456789')->errors());     // [invalid_format]
الخطأالمعنى
invalid_lengthعدد الأرقام ليس 10
invalid_formatيبدأ الرمز بالرقم 0
invalid_type، input_too_longانظر معالجة المُدخَلات

الشكل فقط. لا يوجد رقم تحقق في الرمز البريدي، ولا يُجرى أي فحص لنطاق المنطقة: الرمز المكوّن من 10 أرقام والذي لا يبدأ بالصفر يُعدّ صالحًا حتى لو لم يخصصه البريد الإيراني. ويُقبل عدد صحيح مثل 1234567890 لأن الرمز الصالح لا يبدأ بالصفر أبداً، لكن الأسلم مع ذلك أن تحتفظ بالرموز البريدية نصوصًا.

لوحة المركبة

الشكل

تفهم VehiclePlate لوحة السيارة الخاصة الشائعة: رقمان، وحرف واحد، وثلاثة أرقام، ورمز منطقة من رقمين، وتُكتب هكذا 12ب345 ایران 67. وتُتجاهل كلمة «ایران» والمسافات والشرطات والشرطات السفلية والمسافات الصفرية، فكلّ ما يلي يعني اللوحة نفسها:

PHP
echo VehiclePlate::normalize('۱۲ ب ۳۴۵ ایران ۶۷');   // 12ب34567

$r = VehiclePlate::validate('12ب345 ایران 67');
echo json_encode($r->details(), JSON_UNESCAPED_UNICODE);
// {"normalized":"12ب34567","two_digit":"12","letter":"ب","three_digit":"345","region":"67"}

print_r(VehiclePlate::parse('12ب345 ایران 67'));
// Array ( [two_digit] => 12 [letter] => ب [three_digit] => 345 [region] => 67 )
var_dump(VehiclePlate::parse('xx'));   // NULL

الحروف

يجب أن يكون الحرف واحدًا من: الف ب پ ت ث ج د ز س ش ص ط ع ف ق ک گ ل م ن و ه ی ژ. والصيغة الطويلة الف تُحسب حرفًا واحدًا. ويُقبل الحرفان اللاتينيان D وS للوحات الدبلوماسية والخاصة. وتُطبَّع صور الحروف العربية أولاً، فيُقرأ ك وي على أنهما ک وی:

PHP
echo json_encode(VehiclePlate::validate('12ي34567')->details(), JSON_UNESCAPED_UNICODE);
// {"normalized":"12ی34567","two_digit":"12","letter":"ی","three_digit":"345","region":"67"}

var_dump(VehiclePlate::isValid('12D34567'));       // bool(true)
var_dump(VehiclePlate::isValid('12الف34567'));     // bool(true)

الأخطاء

  • invalid_format : الشكل لا يطابق (أعداد الأرقام خاطئة، أو حرف غير مسموح به، أو جزء مفقود).
  • invalid_region : الشكل مطابق، لكن رمز المنطقة 00 ، أو الجزء ذو الرقمين 00 ، أو الجزء ذو الأرقام الثلاثة 000 . وتبقى الأجزاء المحلَّلة في details() .
PHP
print_r(VehiclePlate::validate('12ب345')->errors());       // [invalid_format]
print_r(VehiclePlate::validate('12ب34500')->errors());     // [invalid_region]
print_r(VehiclePlate::validate('00ب34567')->errors());     // [invalid_region]

من المفيد أن تعرف. تفحص الأداة الشكل وكون الأرقام غير صفرية. وهي لا تعرف أي رموز المناطق موجودة، ولا أي حرف يخص أي نوع من المركبات، وفئات اللوحات الأخرى (الدراجات النارية والتخطيطات الأقدم ولوحات المناطق الحرة واللوحات الحكومية) خارج نطاقها. فالنتيجة الصالحة تعني أن اللوحة سليمة الصياغة، ولا تعني أنها صدرت فعلًا.

تُرجع VehiclePlate::parse() الأجزاء الأربعة في مصفوفة، أو null حين لا تكون اللوحة صالحة وفق القواعد نفسها المعتمدة في validate().