چگونگی تولید و کد ملی ساز 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();
}
}
روزتون بدون باگ 😉
اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم.
در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :
Delphi, Rust ,PHP, JavaScript, Unreal engine, asm, Dart
و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق
شاید امروز جواب خیلی از سؤالها را بتوان از AI گرفت، اما تولید مطالب تخصصی، تجربهمحور و عمیق هنوز به انگیزه نیاز دارد. این نظرات و بازخوردهای شماست که به ما نشان میدهد ادامه دادن این مسیر ارزشمند است.
دیدگاه شما چیست؟