برای طرح سوال و دسترسی به آموزش ها  کانال ما در تلگرام بپویندید  

چگونگی تولید کد ملی valid

اگر تا حالا وسط تست پروژه با خطای Duplicate entry یا Unique constraint failed روبه‌رو شدی، احتمالاً فهمیدی که پاک کردن دستی رکوردهای دیتابیس، بیشتر شبیه جریمه اضافه‌کاریه یا شایدم مالیات کدنویسی تا توسعه نرم‌افزار! این تابع دقیقاً برای همین دردسر نوشته شده؛ تا هر بار بتونی تعداد زیادی کد ملی Valid برای تست، Faker، Seeder و سناریوهای توسعه تولید کنی، بدون اینکه هر پنج دقیقه یک‌بار بری دیتابیس را جارو کنی و دوباره از نو شروع کنی.

فقط یک نکته مهم: این کدها صرفاً از نظر الگوریتم بررسی کد ملی معتبر هستند و به هیچ شخص واقعی یا اطلاعات هویتی اشاره نمی‌کنند. هدف این ابزار فقط ساده‌تر کردن فرآیند توسعه و تست نرم‌افزار است، نه دور زدن سیستم‌ها، نه احراز هویت، نه کارهای خلاقانه‌ای که بعداً باعث بشه اسم برنامه‌نویس توی پرونده حقوقی به‌جای گیت‌هاب دیده بشه! 😄

این تابع رو به زبان‌های rust + js + php می‌ذارم خواستید خودتون با AI تبدیل کنید به به عشقتون😁 ( زبان مورد نظری که عاشقش هستید)

برگرفته از کتابخانه PersianFaker که قبلا توسعه دادیم:

 

تابع کد ملی در php




function validCodeMeli()
{
do {
$randomNumber = str_pad(mt_rand(1, 99999999), 8, '0', STR_PAD_LEFT);
$code = '0000' . $randomNumber;
$code = substr($code, strlen($code) - 10, 10);

if (intval(substr($code, 3, 6)) == 0) {
continue;
}

$checksum = intval(substr($code, 9, 1));
$s = 0;
for ($i = 0; $i < 9; $i++) {
$s += intval(substr($code, $i, 1)) * (10 - $i);
}

$s = $s % 11;

if (($s < 2 && $checksum == $s) || ($s >= 2 && $checksum == (11 - $s))) {
return $code;
}
} while (true);
}

تابع کد ملی در js

function validCodeMeli() {
while (true) {
const randomNumber = String(Math.floor(Math.random() * 99999999) + 1).padStart(8, '0');
let code = '0000' + randomNumber;
code = code.slice(code.length - 10);

if (parseInt(code.slice(3, 9), 10) === 0) {
continue;
}

const checksum = parseInt(code.slice(9, 10), 10);
let s = 0;

for (let i = 0; i < 9; i++) {
s += parseInt(code.slice(i, i + 1), 10) * (10 - i);
}

s = s % 11;

if ((s < 2 && checksum === s) || (s >= 2 && checksum === (11 - s))) {
return code;
}
}
}

تابع کد ملی در rust حالت idiomatic




use rand::Rng;

fn valid_code_meli() -> String {
let mut rng = rand::thread_rng();

loop {
let mut digits = [0u8; 10];

for d in &mut digits[4..] {
*d = rng.gen_range(0..10);
}

let body = &digits[3..9];
if body.iter().all(|&d| d == 0) {
continue;
}

let s: u8 = digits[..9]
.iter()
.enumerate()
.map(|(i, &d)| d * (10 - i as u8))
.sum::<u8>()
% 11;

digits[9] = if s < 2 { s } else { 11 - s };

return digits
.iter()
.map(|d| char::from(b'0' + d))
.collect();
}
}

روزتون بدون باگ 😉


انتشار

در

, , ,

توسط

برچسب‌ها:

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *