PDA

View Full Version : سوال: بدست آوردن کد ملی توسط فرمول



arman_Delta2002
پنج شنبه 20 فروردین 1388, 21:43 عصر
سلام یه کد اشتباه رو تا یک جا دیدیم توی ده تا سایت دیگه هم نشر میدیمش کسی نمدونست که این کد اشکال داره این کد جاوا اسکریپت بود که من میخواستم به ویژوال بسیک تبدیل کنمش که پی به اشتباه اون بردم


function checkMelliCode(varmellicode)
{
var meli_code;
meli_code=varmellicode.value;
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′ )
{
alert(”کد ملی صحیح نمی باشد”);
objcode.focus();
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
{
alert(”کد ملی صحیح نمی باشد”);
objcode.focus();
return true;
}
}
else
{
return true;
}
مشکل کد اینجاست


r=n -parseInt(n/11)*11

خوب هر عددی جای N بزاری که R برابر 0 میشه
کسی درست شده این کد رو نداره . این کد فرمول بدست آوردن صحت کد ملی است که تویه همین سایت هم به صورت مشکل دارش وجود داره . من Dll یا OCX اونو نمیخوام فقط کد اون رو لطف کنین ممنون میشم.

mn_zandy63
یک شنبه 04 مرداد 1388, 00:48 صبح
سلام٬ اشتباه میکنی٬ وقتی به تابع ParseInt داده میشه٬ به عدد صحیح تبدیل میشه و اعشارش از بین میره
در واقع این روش یک روش ساده برای بدست آوردن باقیمانده است.
موفق باشی

amin_ir
چهارشنبه 22 تیر 1390, 02:20 صبح
کد زیر را برای تشخیص صحت کد ملی به صورت vb نوشتم که مشکلات مد نظر شما در آن رفع شده است

Public Function Check_Code_meli(S As String)
Dim meli_code, C, N, R As Long
If (Len(S) = 10) Then
If (S = "1111111111" Or S = 0 Or S = "222222222" Or S = "3333333333" Or S = "4444444444" & _
S = "5555555555" Or S = "6666666666" Or S = "7777777777" Or S = "8888888888" Or S = "9999999999") Then

MsgBox "It's Wrong", vbCritical, "Error"
Check_Code_meli = False

Else

C = Val(Right((S), 1))
N = (Val(Left((S), 1)) * 10) + (Val(Mid((S), 2, 1)) * 9) + (Val(Mid((S), 3, 1)) * 8) + (Val(Mid((S), 4, 1)) * 7) + (Val(Mid((S), 5, 1)) * 6) + (Val(Mid((S), 6, 1)) * 5) + (Val(Mid((S), 7, 1)) * 4) + (Val(Mid((S), 8, 1)) * 3) + (Val(Mid((S), 9, 1)) * 2)
R = N - Fix(N / 11) * 11
If ((R = 0 And R = C) Or (R = 1 And C = 1) Or (R > 1 And C = 11 - R)) Then
Check_Code_meli = True
Else
MsgBox " It's Wrong ", vbCritical, "Error"
Check_Code_meli = False
End If
End If
Else

MsgBox "It's not 10 digit", vbCritical, "Error"
Check_Code_meli = False
End If

End Function