فهرست مطالب
تولید کد ملی تستی برای برنامهنویسان و تسترهایی است که باید فرمها، اعتبارسنجیها و پایگاههای دادهٔ نرمافزار را با کدهای ملی آزمایش کنند، بدون اینکه از کد ملی افراد واقعی استفاده کنند. کدهایی که این ابزار میسازد، دهرقمیاند، پیششمارهٔ یک حوزهٔ واقعی ثبت احوال را دارند و رقم کنترل آنها درست محاسبه شده است؛ یعنی هر سامانهای که فقط ساختار کد را بررسی میکند، آنها را میپذیرد. در ابزار بالا اگر لازم است شهری را انتخاب کنید تا سه رقم اول کدها از پیششمارههای همان شهر باشد، تعداد کدها را مشخص کنید و دکمهٔ تولید را بزنید. کدها را میتوانید تکی کپی کنید، همه را یکجا کپی کنید یا بهصورت فایل CSV با ستونهای کد، شهر و استان دانلود کنید.
راهنمای استفاده از تولید کد ملی تستی
- در صورت نیاز شهر محل صدور را انتخاب کنید تا سه رقم اول متناسب باشد.
- تعداد کدهای موردنیاز را مشخص کنید و «تولید» را بزنید.
- کدها را تکی کپی کنید یا همه را یکجا کپی یا دانلود کنید.
تولید کد ملی تستی برای چیست؟
هر نرمافزاری که کد ملی میگیرد، از سامانهٔ ثبتنام یک فروشگاه اینترنتی تا نرمافزار حسابداری و سامانههای بانکی و بیمه، باید پیش از انتشار تست شود. تستر لازم دارد کدهای زیادی را در فرم وارد کند، ببیند سامانه کدهای معتبر را میپذیرد و کدهای نامعتبر را رد میکند، دادهها درست ذخیره میشوند و گزارشها درست نمایش داده میشوند. برای این کار، به کدهایی نیاز است که از نظر ساختار معتبر باشند، اما به کسی تعلق نداشته باشند و استفاده از آنها به حریم خصوصی کسی آسیب نزند.

بسیاری از تیمهای نرمافزاری در گذشته برای تست، از کد ملی خودشان، همکاران یا مشتریان استفاده میکردند. این کار دو مشکل جدی دارد: اطلاعات واقعی افراد در محیطهای تست که معمولا امنیت کمتری دارند پراکنده میشود، و تعداد کدهای واقعی در دسترس برای تستهای گسترده کافی نیست. مولد کد ملی تستی هر دو مشکل را حل میکند.
کدهای تولیدشده چطور ساخته میشوند؟
ابزار برای هر کد، ابتدا یکی از پیششمارههای سهرقمی موجود در فهرست را بهطور تصادفی انتخاب میکند؛ اگر شهری انتخاب کرده باشید، فقط از پیششمارههای همان شهر. سپس شش رقم سریال را با مولد تصادفی امن مرورگر میسازد. اگر شش رقم سریال همه صفر شود، که طبق قواعد نامعتبر است، دوباره تولید میکند. در پایان، رقم کنترل را با همان الگوریتم رسمی از نُه رقم قبلی محاسبه و به انتهای کد اضافه میکند. کدهایی که همهٔ رقمهایشان یکسان باشد هم کنار گذاشته میشوند.
نتیجه، کدهایی است که از نظر هر بررسی ساختاری معتبرند: ده رقم، پیششمارهٔ واقعی، سریال غیرصفر و رقم کنترل درست. میتوانید هر کدام را با بررسی صحت کد ملی آزمایش کنید؛ همه معتبر شناخته میشوند و شهر صادرکننده هم نمایش داده میشود.
یک هشدار مهم؛ کد تستی ممکن است واقعی باشد
چون کدها تصادفی و با ساختار درست ساخته میشوند، ممکن است برخی از آنها با کد ملی شخصی واقعی یکی باشند. فضای کدهای ملی ممکن، با حدود ششصد پیششماره و یک میلیون سریال برای هر کدام، بسیار بزرگ است، اما بخش قابلتوجهی از آن به افراد واقعی اختصاص یافته است. پس هرگز کدهای تولیدشده را در فرمها و سامانههای واقعی وارد نکنید. استفاده از کد ملی دیگران برای ثبتنام، خرید یا دریافت خدمات، حتی اگر کد بهطور تصادفی ساخته شده باشد، میتواند عواقب حقوقی جدی داشته باشد.
این ابزار فقط برای محیطهای توسعه و تست طراحی شده است؛ جایی که دادهها به هیچ فرد واقعی مرتبط نمیشوند و هیچ خدمت واقعی بر اساس آنها ارائه نمیشود. اگر در محیط تست شما اتصالی به سامانههای واقعی استعلام هویت وجود دارد، آن را برای تست با کدهای ساختگی غیرفعال یا شبیهسازی کنید.
حالتهایی که باید در اعتبارسنجی تست شوند
تست خوب فقط وارد کردن چند کد معتبر نیست. سامانه باید در برابر انواع ورودیهای درست و نادرست، رفتار درستی داشته باشد. جدول زیر حالتهای مهمی را که باید تست شوند، خلاصه کرده است.
| حالت | نمونهٔ ورودی | رفتار درست سامانه |
|---|---|---|
| کد معتبر عادی | کد تولیدشده با این ابزار | پذیرش |
| کد با صفر ابتدایی | کدهای پیششمارهٔ ۰۰۱ تا ۰۰۸ | پذیرش و ذخیره با صفرها |
| ارقام فارسی | همان کد با ارقام فارسی | تبدیل و پذیرش |
| فاصله یا خط تیره | کد با فاصله بین گروهها | پاکسازی و پذیرش |
| رقم کنترل اشتباه | تغییر رقم آخر یک کد معتبر | رد با پیام روشن |
| طول نادرست | نُه یا یازده رقم | رد یا تکمیل با صفر طبق قاعده |
| رقمهای تکراری | ده رقم یکسان | رد |
| حروف | کد همراه با حرف | رد |

برای ساختن کدهای نامعتبر، کافی است رقم آخر یک کد تولیدشده را تغییر دهید؛ تقریبا همیشه کد نامعتبر میشود. برای تست طول، یک رقم حذف یا اضافه کنید. برای تبدیل ارقام به فارسی و برعکس، تبدیل اعداد فارسی و انگلیسی کمک میکند.
صفرهای ابتدایی؛ آزمون مهم پایگاه داده
تستی حیاتی که اغلب فراموش میشود، ذخیره و بازخوانی کدهایی است که با صفر شروع میشوند. اگر سامانه کد ملی را در ستونی عددی ذخیره کند، صفرهای ابتدایی حذف میشوند و کد ۰۰۱۲۳۴۵۶۷۹ به ۱۲۳۴۵۶۷۹ تبدیل میشود. این خطا گاهی ماهها پنهان میماند تا کاربری تهرانی با پیششمارهٔ صفردار به مشکل بخورد. برای تست، شهر تهران را در ابزار انتخاب کنید تا کدهایی با پیششمارهٔ صفردار بگیرید و چرخهٔ کامل ثبت، ذخیره، جستوجو و نمایش را با آنها آزمایش کنید.
همین تست را برای خروجیهای سامانه هم انجام دهید. گزارشهایی که به صفحهگسترده صادر میشوند، اگر ستون کد ملی را متنی تعریف نکنند، صفرها را در صفحهگسترده از دست میدهند. فایل CSV این ابزار را در برنامهٔ صفحهگسترده باز کنید و ببینید صفرها حفظ میشوند یا نه؛ این خودش تست خوبی برای فرایند وارد کردن داده است.
استفاده از فایل CSV
خروجی CSV ابزار برای پر کردن پایگاه دادهٔ تست، ساختن دادههای نمونه برای نمایش نرمافزار به مشتری یا تست عملکرد با حجم زیاد مفید است. فایل سه ستون دارد: کد ملی، شهر و استان. میتوانید آن را با دادههای ساختگی دیگر مثل نام، شماره موبایل و نشانی ترکیب کنید تا رکوردهای کامل تستی بسازید. برای شماره موبایل تستی، از پیششمارههای معتبر اپراتورها با ارقام تصادفی استفاده کنید و پیششمارهها را با تشخیص اپراتور از شماره موبایل بررسی کنید.
اگر به شناسههای یکتای دیگری برای رکوردهای تستی نیاز دارید، تولید UUID شناسههای استاندارد میسازد. برای ساختن دادههای ساختارمند و بررسی آنها، فرمت JSON هم مفید است.
پیادهسازی اعتبارسنجی در کد
اگر خودتان اعتبارسنجی کد ملی را پیادهسازی میکنید، الگوریتم ساده است: ورودی را پاکسازی کنید، ارقام را یکسان کنید، طول را بررسی کنید، کدهای کوتاهتر هشت و نُه رقمی را با صفر از چپ تکمیل کنید، الگوهای ممنوع را رد کنید و رقم کنترل را محاسبه و مقایسه کنید. همین منطق را هم در سمت کاربر برای بازخورد سریع و هم در سمت سرور برای امنیت پیاده کنید. تستهای خودکار بنویسید که مجموعهای از کدهای تولیدشده با این ابزار و کدهای عمدا نادرست را بررسی کنند تا هر تغییر آینده در کد، اعتبارسنجی را خراب نکند.
یک نکتهٔ طراحی: پیام خطا را مشخص و مفید بنویسید. کاربری که کد ملیاش را اشتباه وارد کرده، با پیام «کد ملی نامعتبر است» نمیداند کجای کار ایراد دارد. پیامهایی مثل «کد ملی باید ۱۰ رقم باشد» یا «یکی از ارقام کد ملی اشتباه وارد شده است» راهنمای بهتریاند.
تست با حجم زیاد
گاهی لازم است سامانه را با هزاران یا دهها هزار رکورد آزمایش کنید؛ مثلا برای سنجش سرعت جستوجو در پایگاه داده، کارایی گزارشها یا رفتار سامانه زیر بار. برای این کار، چند بار از ابزار خروجی بگیرید و فایلها را با هم ترکیب کنید، یا منطق تولید را در اسکریپت تست خودتان پیاده کنید؛ الگوریتم آن ساده است و در همین صفحه توضیح داده شد. در تستهای حجمی، توزیع پیششمارهها را هم در نظر بگیرید؛ اگر همهٔ کدها یک پیششماره داشته باشند، ممکن است شاخصهای پایگاه داده رفتاری متفاوت از دنیای واقعی نشان دهند.
نکتهٔ دیگر در تست حجمی، یکتایی است. اگر در سامانهٔ شما کد ملی کلید یکتاست، تکراریها را پیش از وارد کردن حذف کنید وگرنه وارد کردن داده با خطا متوقف میشود. یا برعکس، اگر میخواهید رفتار سامانه در برابر کد تکراری را تست کنید، عمدا چند تکراری در داده بگذارید.
جداسازی محیط تست از محیط واقعی
کدهای ملی تستی باید فقط در محیطهای تست و توسعه بمانند. یکی از اشتباههای پرهزینه، راه یافتن دادههای تستی به محیط عملیاتی است؛ مثلا اسکریپت وارد کردن داده که اشتباهی روی پایگاه دادهٔ اصلی اجرا شده. برای پیشگیری، محیطها را از نظر دسترسی و پیکربندی کاملا جدا کنید و رکوردهای تستی را با نشانهای مشخص، مثلا نامهایی با پیشوند «تست»، علامتگذاری کنید تا در صورت نشت، به سادگی قابل شناسایی و حذف باشند.
اگر سامانهٔ شما به سرویسهای بیرونی مثل استعلام هویت، پیامک یا پرداخت متصل است، در محیط تست از نسخههای شبیهسازیشده یا محیط آزمایشی آن سرویسها استفاده کنید. ارسال کدهای ملی ساختگی به سرویسهای واقعی استعلام، هم هزینه دارد و هم ممکن است بهعنوان رفتار مشکوک شناسایی شود.
خطاهای رایج فرمهای ایرانی که باید تست شوند
کد ملی فقط یکی از ورودیهایی است که در فرمهای فارسی دردسر میسازد. هنگام تست، به چند مورد دیگر هم توجه کنید: حروف عربی «ي» و «ك» که از برخی صفحهکلیدها وارد میشوند و با «ی» و «ک» فارسی یکسان نیستند؛ نیمفاصله در نامها و نشانیها؛ ارقام فارسی و عربی در شماره تلفن و کد پستی؛ و تاریخهای شمسی با سالهای کبیسه. فرمی که در همهٔ این حالتها درست رفتار کند، برای کاربران فارسیزبان تجربهٔ بسیار بهتری دارد.
برای تست شمارههای بانکی، از شمارههای آزمایشی که بانکها و درگاههای پرداخت در محیط تست خود ارائه میدهند استفاده کنید، نه شماره کارت یا شبای واقعی. اعتبارسنجی ساختاری این شمارهها را با تشخیص بانک از شماره کارت و اعتبارسنجی شماره شبا میتوانید بررسی کنید.
دادهٔ تستی و اخلاق حرفهای
استفاده از دادهٔ ساختگی بهجای دادهٔ واقعی، فقط یک توصیهٔ فنی نیست؛ بخشی از مسئولیت حرفهای توسعهدهندگان در قبال کاربران است. نشت دادهٔ شخصی از محیطهای تست، از رایجترین منابع افشای اطلاعات در جهان بوده است. هرچه کمتر از دادهٔ واقعی در محیطهای غیرعملیاتی استفاده شود، خطر کمتر است. اگر ناچارید از دادهٔ عملیاتی برای تست استفاده کنید، آن را پیش از انتقال به محیط تست ناشناس کنید و کدهای ملی را با کدهای ساختگی جایگزین کنید.
کد ملی تستی در آموزش برنامهنویسی
برای دانشجویان و کسانی که برنامهنویسی یاد میگیرند، پیادهسازی اعتبارسنجی کد ملی تمرین بسیار خوبی است. این تمرین هم کار با رشتهها و حلقهها را تمرین میدهد، هم باقیماندهٔ تقسیم و هم فکر کردن دربارهٔ حالتهای مرزی را. مدرسان میتوانند از این ابزار برای ساختن مجموعهای از کدهای معتبر استفاده کنند و چند کد نامعتبر هم دستی بسازند تا دانشجویان برنامهٔ خود را با آنها بسنجند. این تمرین، به دانشجو یاد میدهد که دادههای ورودی دنیای واقعی همیشه تمیز نیستند و برنامه باید با ارقام فارسی، فاصلههای اضافه و صفرهای حذفشده کنار بیاید.
در دورههای پیشرفتهتر، همین تمرین را میتوان به تست خودکار، مستندسازی و طراحی پیام خطا گسترش داد. یک تابع اعتبارسنجی کوچک، میتواند به پروژهٔ کاملی برای یادگیری اصول نرمافزار خوب تبدیل شود.
سؤالهای رایج تسترها
یک پرسش رایج این است که آیا کدهای یک بار تولید با هم تکراریاند. احتمال تکرار در چند ده کد بسیار کم است، اما اگر به هزاران کد نیاز دارید و یکتایی برایتان مهم است، پس از تولید، تکراریها را حذف کنید. پرسش دیگر این است که آیا میتوان کد تستی با رقم کنترل صفر یا یک ساخت؛ این حالتها هم در خروجی ابزار پیش میآیند، چون رقم کنترل از نُه رقم دیگر تعیین میشود. اگر این حالتها را بهطور خاص لازم دارید، چند بار تولید کنید تا نمونههایشان را پیدا کنید. پرسش سوم این است که آیا کدهای تولیدشده برای همهٔ استانها توزیع یکسانی دارند؛ وقتی شهری انتخاب نکنید، پیششمارهها از کل فهرست با شانس برابر انتخاب میشوند، نه به نسبت جمعیت. اگر توزیعی شبیه جمعیت واقعی لازم دارید، برای شهرهای بزرگتر کدهای بیشتری جداگانه تولید کنید. این کار در تست گزارشهای استانی اهمیت دارد.
حریم خصوصی خود ابزار
این ابزار کاملا در مرورگر شما کار میکند. کدها روی دستگاه خودتان ساخته میشوند و به هیچ سروری فرستاده یا در هیچ جایی ذخیره نمیشوند؛ با بستن صفحه، از بین میروند. فایل CSV هم مستقیم در دستگاه شما ساخته و دانلود میشود. اگر کدهایی را برای تستهای بعدی لازم دارید، فایل را در مخزن پروژهٔ تست خود نگه دارید تا تستها با دادههای ثابت و قابل تکرار اجرا شوند؛ تستهایی که هر بار با دادهٔ تصادفی تازه اجرا میشوند، گاهی خطاهایی میسازند که تکرار و پیگیریشان سخت است.
ابزارهای مرتبط
برای فهرست کامل پیششمارهها، پیششماره کد ملی شهرها را ببینید. ابزارهای دیگر اعتبارسنجی در صفحهٔ کد ملی، کارت و شبا آمدهاند.
آخرین بازبینی محتوا: · تیم تحریریه ابزار جیبی