اگر تا حالا وسط تست پروژه با خطای 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 ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق


دیدگاهتان را بنویسید لغو پاسخ