صورت مسئله: نیاز قانونی به دریافت و راستیآزمایی کد ملی خریداران
برای صدور فاکتورهای رسمی، اتصال به سامانههای مودیان، ثبت نام بلیت یا ارسال کالا با بیمه پستی، دریافت کد ملی صحیح الزامی است. ورود اعداد جعلی نظیر ۱۱۱۱۱۱۱۱۱۱ یا اعداد کمتر از ۱۰ رقم باعث اخلال در سامانه مالیاتی و رد شدن فاکتورها میشود.
راهکار فنی و شیوه عملکرد کد
با هوکهای woocommerce_checkout_fields و woocommerce_after_checkout_validation، فیلد کد ملی را در فرم ثبت کرده و با الگوریتم رسمی کنترل رقم دهگان و باقیمانده بر ۱۱، صحت ریاضی آن را در سرور بررسی میکنیم.
قطعه کد استاندارد فیلد کد ملی و اعتبارسنجی
کد زیر را برای دریافت و بررسی کد ملی اضافه فرمایید:
/*
* Add National ID (Melli Code) Field with Official Algorithm Validation in WooCommerce
* Validates 10-digit checksum and stores data in order meta and admin panel
* Mahdi Jafarzadeh | WPWM
*/
// ۱. افزودن فیلد کد ملی به فرم صورتحساب
add_filter('woocommerce_checkout_fields', 'wpwm_add_national_code_field');
function wpwm_add_national_code_field($fields) {
$fields['billing']['billing_national_code'] = [
'type' => 'text',
'label' => 'کد ملی خریدار',
'placeholder' => 'کد ملی ۱۰ رقمی بدون خط تیره',
'required' => true,
'class' => ['form-row-wide'],
'priority' => 25,
];
return $fields;
}
// ۲. اعتبارسنجی الگوریتم رسمی کد ملی ایران
add_action('woocommerce_after_checkout_validation', 'wpwm_validate_national_code', 10, 2);
function wpwm_validate_national_code($data, $errors) {
if (empty($data['billing_national_code'])) {
$errors->add('validation', 'لطفاً کد ملی خود را وارد نمایید.');
return;
}
$code = preg_replace('/[^0-9]/', '', $data['billing_national_code']);
if (strlen($code) !== 10 || preg_match('/^(d)1{9}$/', $code)) {
$errors->add('validation', 'کد ملی وارد شده نامعتبر است.');
return;
}
$check = (int) $code[9];
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += ((int) $code[$i]) * (10 - $i);
}
$rem = $sum % 11;
$valid = ($rem = 2 && $check == (11 - $rem));
if (!$valid) {
$errors->add('validation', 'کد ملی وارد شده از نظر ساختار ریاضی صحیح نمیباشد.');
}
}
// ۳. نمایش کد ملی در پنل مدیریت سفارش
add_action('woocommerce_admin_order_data_after_billing_address', function($order){
$code = $order->get_meta('_billing_national_code');
if ($code) {
echo 'کد ملی: ' . esc_html($code) . '
';
}
}, 10, 1);
نحوه استفاده و محل قرارگیری کد
- کد را در انتهای
functions.phpقالب یا پلاگین اختصاصی قرار دهید. - به صفحه تسویه حساب بروید و اعتبارسنجی فیلد را با کدهای تستی بررسی کنید.
نکات مهم ایمنی و نگهداری
- الگوریتم به کار رفته تمام حالات خطای رایج از جمله تکرار ۱۰ بار یک رقم را مسدود میکند.
- کد ملی به طور خودکار در متادیتاهای سفارش ذخیره شده و در فاکتورهای استاندارد قابل فراخوانی است.
💡 به اتصال ووکامرس به سامانه مودیان یا نرمافزارهای سپیدار و هلو نیاز دارید؟ از خدمات طراحی افزونههای اختصاصی وبمستر وردپرس بهرهمند شوید.
دیدگاهها و پرسشها
پاسخها، تجربهها و دیدگاههای کاربران در یک گفتوگوی منظم.
گفتوگوهای کاربران
جدیدترین دیدگاهها در ابتدااولین پرسش یا تجربه را ثبت کنید؛ ایمیلتان نمایش داده نمیشود.