PDA

View Full Version : سوال: اعتبار سنجی کد ملی



soroush.r70
دوشنبه 09 اردیبهشت 1392, 09:53 صبح
من از کد زیر برای اعتبار سنجی کد ملی استفاده می کنم ولی جواب نمی ده
در واقع باید وقتی در هنگام نوشتن کد ملی غلط بود سریعا حواب بده که نمی ده راه حل چیه...؟


<html>
<head>
<script type="text/javascript">
function checkMelliCode(meli_code)
{
if (meli_code.length == 10)
{
if(meli_code=='1111111111' || meli_code=='2222222222' || meli_code=='3333333333' || meli_code=='4444444444' || meli_code=='5555555555' || meli_code=='6666666666' || meli_code=='7777777777' || meli_code=='8888888888' || meli_code=='9999999999' )
{
alert(11);
}else{
c = parseInt(meli_code.charAt(9));
n = parseInt(meli_code.charAt(0))*10 + parseInt(meli_code.charAt(1))*9 + parseInt(meli_code.charAt(2))*8 + parseInt(meli_code.charAt(3))*7 + parseInt(meli_code.charAt(4))*6 + parseInt(meli_code.charAt(5))*5 + parseInt(meli_code.charAt(6))*4 + parseInt(meli_code.charAt(7))*3 + parseInt(meli_code.charAt(8))*2;
r = n - parseInt(n/11)*11;
if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r))
{
alert('sahih ast');
}
else
{
alert('sahih nist');
}
}
}

}
</script>
</head>
<body>
<input type="text" onKeyPress="return checkMelliCode('');" >
</body>
</html>

webeloper
دوشنبه 09 اردیبهشت 1392, 10:21 صبح
سلام
این کار میکنه، اما در خط 25 نمی دونم چزا وقتی می زارم تو تگ، سایت id رو به صورت c odem می نویسه، اونو خودتون تصحیح کنید
<html>
<head>
<script type="text/javascript">
function checkMelliCode(meli_code) {
if (meli_code.length == 10) {
if (meli_code == '1111111111' || meli_code == '0000000000' || meli_code == '2222222222' || meli_code == '3333333333' || meli_code == '4444444444' || meli_code == '5555555555' || meli_code == '6666666666' ||meli_code == '7777777777' ||meli_code == '8888888888' ||meli_code == '9999999999') {
return false;
}
c = parseInt(meli_code.charAt(9));
n = parseInt(meli_code.charAt(0)) * 10 + parseInt(meli_code.charAt(1)) * 9 + parseInt(meli_code.charAt(2)) * 8 + parseInt(meli_code.charAt(3)) * 7 +parseInt(meli_code.charAt(4)) * 6 + parseInt(meli_code.charAt(5)) * 5 + parseInt(meli_code.charAt(6)) * 4 + parseInt(meli_code.charAt(7)) * 3 + parseInt(meli_code.charAt(8)) * 2;
r = n - parseInt(n / 11) * 11;
if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
</script>
</head>
<body>
<input type="text" id='codem'>
<button type="button" id="check" onclick="checkMelliCode(document.getElementById('codem').va lue) ? alert ( 'sahih ast' ): alert ('sahih nist');">check code</button></body>
</html>

mojtaba.baghban
دوشنبه 09 اردیبهشت 1392, 13:49 عصر
من این کد رو واسه پلاگین validate که واسه jquery هست نوشتم.
هیچ مشکلی نداره

jQuery.validator.addMethod("nationalcode", function (value, element) {
var a;
var b = 0;
var c;
var counter = 1;
var check = true;
var trval = $.trim(value);
if (!(/^[1-9]\d{9}$/.test(trval))) {
check = false;
}
if (trval == '0000000000' || trval == '1111111111' || trval == '2222222222' || trval == '3333333333' || trval == '4444444444' || trval == '5555555555' || trval == '6666666666' || trval == '7777777777' || trval == '8888888888' || trval == '9999999999') {
check = false;
}
a = parseInt(trval.substring(9, 10));
while (counter <= 9) {
b = b + parseInt(trval.substring(counter - 1, counter)) * (11 - counter);
counter = counter + 1;
}
c = b % 11;
if ((c == 0 || c == 1) && a != c) {
check = false;
}
if (c > 1 && a != 11 - c) {
check = false;
}
return this.optional(element) || check;
}, "لطفا کد ملی معتبر وارد کنید");

soroush.r70
دوشنبه 09 اردیبهشت 1392, 15:52 عصر
عمل نکردن چرا....؟

ravand
دوشنبه 09 اردیبهشت 1392, 22:22 عصر
سروش از من می پرسی اصلا دنبالش نباش . من یادمه چند سال پیش تستش کردم برای برخی کدملی ها عمل نمیکرد.

WOLF_MEHRDAD
دوشنبه 09 اردیبهشت 1392, 22:26 عصر
جنتاب روند درست میگن
من چند سال پیش برای یه شرکت پرونده پزشکی وارد سیستم میکردم :لبخند: بعضی از کد های ملی مشکل داشتن ( فکر کنم با 0 شروع میشدن دقیق یادم نیس )

soroush.r70
سه شنبه 10 اردیبهشت 1392, 09:57 صبح
ماله کسیه حتما باید تحویلش بدم دوستان

mojtaba.baghban
چهارشنبه 11 اردیبهشت 1392, 14:49 عصر
اون کدی کخ گذاشتم واسه خودم که کار می‌کنه. کد ملی خانواده‌ی خودم رو امتحان کردم جواب داده
شما با چه کد ملی به مشکل خوردی. بگو تا بررسی کنم

m-ezati
چهارشنبه 25 اردیبهشت 1392, 09:39 صبح
سلام
داداش خسته نباشی کد رو برات اصلاح کردم می تونی دانلود کنی!
خودم تستش کردم درسته.
http://kambaden.ir/CodeMeliAuthontication.rar :لبخندساده:

ravand
چهارشنبه 25 اردیبهشت 1392, 09:46 صبح
یعنی از چه لحاظ اصلاحش کردی؟
یعنی با هر کد ملی تستش کردی مشکل نداشت؟

m-ezati
چهارشنبه 25 اردیبهشت 1392, 10:23 صبح
بله من اینو برای تست رو وب سایت دانشگاه قرار دادم و به همه دانشجویان برای تستش خبر دادم مشکل نداشته
ضمنا با سیستم گلستان هم تستش کردم الگوریتمش یکیه!

MostafaEs3
چهارشنبه 25 اردیبهشت 1392, 21:05 عصر
دوستان تابع تشخیص اعتبار کدملی رو (برای PHP) حاضر کردم ::


function Check_MelliCode($code) {

$data = array();
//$errors = array();

$data['MelliCode'] = trim(strip_tags($code));
$data['invalid'] = array('0000000000', '1111111111', '2222222222', '3333333333', '4444444444', '5555555555', '6666666666', '7777777777', '8888888888', '9999999999');

if (is_numeric($data['MelliCode'])) {
if (strlen($data['MelliCode']) == 10) {
if (!in_array($data['MelliCode'], $data['invalid'])) {

$data['letters'] = array(
'1' => substr($data['MelliCode'], 0, 1),
'2' => substr($data['MelliCode'], 1, 1),
'3' => substr($data['MelliCode'], 2, 1),
'4' => substr($data['MelliCode'], 3, 1),
'5' => substr($data['MelliCode'], 4, 1),
'6' => substr($data['MelliCode'], 5, 1),
'7' => substr($data['MelliCode'], 6, 1),
'8' => substr($data['MelliCode'], 7, 1),
'9' => substr($data['MelliCode'], 8, 1),
'10' => substr($data['MelliCode'], 9, 1)
);

/* Number (A) */
$data['num_a'] = $data['letters'][10];

/* Number (B) */
$data['num_b'] = ($data['letters'][1] *10);
$data['num_b'] += ($data['letters'][2] *9);
$data['num_b'] += ($data['letters'][3] *8);
$data['num_b'] += ($data['letters'][4] *7);
$data['num_b'] += ($data['letters'][5] *6);
$data['num_b'] += ($data['letters'][6] *5);
$data['num_b'] += ($data['letters'][7] *4);
$data['num_b'] += ($data['letters'][8] *3);
$data['num_b'] += ($data['letters'][9] *2);

/* Number (C) */
$data['num_c'] = $data['num_b'] - intval($data['num_b'] / 11) * 11;


/***** Check-Code *****/
if ($data['num_c'] == 0 && $data['num_c'] == $data['num_a']) {

return true;
} else if ($data['num_c'] == 1 && $data['num_a'] == 1) {

return true;
} else if ($data['num_c'] > 1 && $data['num_a'] == ($data['num_c'] - 11)) {

return true;
} else {
$error = 'تطابق کدملی با الگوریتم ها انجام نشد';
return $error;
}
} else {
$error = 'کد ملی نباید 10 رقم یکسان باشد';
return $error;
}
} else {
$error = 'کد ملی بایستی برابر با 10 رقم باشد';
return $error;
}
} else {
$error = 'مقدار کد ملی میبایست عددی باشد';
return $error;
}
}


نحوه استفاده ::


$CheckCode = Check_MelliCode('1234567890');
if ($CheckCode === true) {
echo 'کد ملی صحیح است';
} else {
echo 'کدملی نامعتبر است - ' . $CheckCode;
}

------------------------------------------
موفق باشید

MMSHFE
پنج شنبه 26 اردیبهشت 1392, 08:35 صبح
میگم اینقدرها هم پیچیده نیست ها :چشمک: :


<?php
function nCode($code) {
$code = substr($code, 0, 10);
$sum = 0;
for($i = 0; $i < 9; $i++) {
$sum += ((10 - $i) * substr($code, $i, 1));
}
$sum %= 11;
if($sum > 2) {
$sum = 11 - $sum;
}
return ($sum == substr($code, -1));
}
?>

sh.n.n786
پنج شنبه 26 اردیبهشت 1392, 12:38 عصر
درود و ...
درپی تابع آقای شهرکی این هم برای استثنا ها :


function nCode($code){
$dic = array();
for($a = 1 ; $a <= 9 ; $a++){$dic[] = $a.$a.$a.$a.$a.$a.$a.$a.$a.$a;}
if(!in_array($code , $dic)) {
$code = substr($code, 0, 10);
$sum = 0;
for($i = 0; $i < 9; $i++) {
$sum += ((10 - $i) * substr($code, $i, 1));
}
$sum %= 11;
if($sum > 2) {
$sum = 11 - $sum;
}
return ($sum == substr($code, -1));
}
}

موفق باشید

MostafaEs3
پنج شنبه 26 اردیبهشت 1392, 13:05 عصر
میگم اینقدرها هم پیچیده نیست ها :چشمک: :


<?php
function nCode($code) {
$code = substr($code, 0, 10);
$sum = 0;
for($i = 0; $i < 9; $i++) {
$sum += ((10 - $i) * substr($code, $i, 1));
}
$sum %= 11;
if($sum > 2) {
$sum = 11 - $sum;
}
return ($sum == substr($code, -1));
}
?>


آقای شهرکی این کد خیلی دقیق اعتبارسنجی انجام نمیده. من کدملی خودم رو (بدون رقم آخر و 9 رقمی) وارد کردم بازهم true برگشت

farshadvl
سه شنبه 08 بهمن 1392, 09:28 صبح
من کد ملی خودم وارد کردم میگه اشتباه است که !!!!!

MMSHFE
سه شنبه 08 بهمن 1392, 12:15 عصر
آقای شهرکی این کد خیلی دقیق اعتبارسنجی انجام نمیده. من کدملی خودم رو (بدون رقم آخر و 9 رقمی) وارد کردم بازهم true برگشت
شاید رقم آخر صفر بوده. درهرحال برای اطمینان، یک if بهش اضافه کنید که اگه طول رشته مخالف 10 بود، false برگردونه.