طریقه بررسی صحت کدملی به کمک متدهای الحاقی
نویسنده: علیرضا اسمرام
تاریخ: ۱۳۹۲/۰۱/۰۶ ۱۶:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
/// <summary>
/// Validate IR National Code
/// </summary>
/// <param name="nationalcode">National Code</param>
/// <returns></returns>
public static bool IsValidNationalCode(this string nationalcode)
{
int last;
return nationalcode.IsValidNationalCode(out last);
}
/// <summary>
/// Validate IR National Code
/// </summary>
/// <param name="nationalcode">National Code</param>
/// <param name="lastNumber">Last Number Of National Code</param>
/// <returns></returns>
public static bool IsValidNationalCode(this string nationalcode, out int lastNumber)
{
lastNumber = -1;
if (!nationalcode.IsItNumber()) return false;
var array = nationalcode.ToCharArray();
if (array.Length != 10) return false;
var j = 10;
var sum = 0;
for (var i = 0; i < array.Length - 1; i++)
{
sum += Int32.Parse(array[i].ToString(CultureInfo.InvariantCulture)) * j;
j--;
}
var div = sum / 11;
var r = div * 11;
var diff = Math.Abs(sum - r);
if (diff <= 2)
{
lastNumber = diff;
return diff == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}
var temp = Math.Abs(diff - 11);
lastNumber = temp;
return temp == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}bool b = "0077611616".IsValidNationalCode();
public static bool IsItNumber(this string inputvalue)
{
var isnumber = new Regex("[^0-9]");
return !isnumber.IsMatch(inputvalue);
} public static bool IsValidNationalCode(this string nationalcode, out int lastNumber)
{
lastNumber = -1;
if (!nationalcode.IsItNumber()) return false;
var array = nationalcode.ToCharArray();
if (array.Length != 10) return false;
var j = 10;
var sum = 0;
for (var i = 0; i < array.Length - 1; i++)
{
sum += Int32.Parse(array[i].ToString(CultureInfo.InvariantCulture)) * j;
j--;
}
var div = sum / 11;
var r = div * 11;
var diff = Math.Abs(sum - r);
if (diff <= 2)
{
lastNumber = diff;
return diff == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}
var temp = Math.Abs(diff - 11);
lastNumber = temp;
return temp == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}var div = sum / 11; var r = div * 11; var diff = Math.Abs(sum - r);
var diff = sum % 11;
if (diff <= 2)
{
lastNumber = diff;
return diff ==(11- Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture)));
} var allDigitEqual = new[] { "0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777", "8888888888", "9999999999" };
if (allDigitEqual.Contains(nationalcode)) return false; /// <summary>
/// Validate IR National Code
/// </summary>
/// <param name="nationalcode">National Code</param>
/// <param name="lastNumber">Last Number Of National Code</param>
/// <returns></returns>
public static bool IsValidNationalCode(this string nationalcode, out int lastNumber)
{
lastNumber = -1;
if (!nationalcode.IsItNumber()) return false;
var invalid = new[]
{
"0000000000", "1111111111", "2222222222", "3333333333", "4444444444", "5555555555",
"6666666666", "7777777777", "8888888888", "9999999999"
};
if (invalid.Contains(nationalcode)) return false;
var array = nationalcode.ToCharArray();
if (array.Length != 10) return false;
var j = 10;
var sum = 0;
for (var i = 0; i < array.Length - 1; i++)
{
sum += Int32.Parse(array[i].ToString(CultureInfo.InvariantCulture)) * j;
j--;
}
var diff = sum % 11;
if (diff < 2)
{
lastNumber = diff;
return diff == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}
var temp = Math.Abs(diff - 11);
lastNumber = temp;
return temp == Int32.Parse(array[9].ToString(CultureInfo.InvariantCulture));
}من از الگوریتم زیر استفاده میکنم گفتم اینجا بنویسم شاید به کار بیاد
Private Function ValidateNcode(ByVal NC As Int64) As Boolean
If IsNumeric(NC) = False Or NC.ToString.Length < 10 Then
Return False
End If
Dim vnc As String = NC.ToString
Dim pos As Integer = 10
Dim sum As Integer = 0
For i = 0 To 8
sum += Integer.Parse(vnc.ToCharArray()(i).ToString()) * pos
pos = pos - 1
Next i
Dim remind As Integer = sum Mod 11
Dim controlNum As Integer = Integer.Parse(vnc.ToCharArray()(9))
If remind <= 2 Then
If controlNum = remind Then
Return True
Else
Return False
End If
Else
If (11 - remind) = controlNum Then
Return True
Else
Return False
End If
End If
End Functionprivate bool ValidateNcode(Int64 NC)
{
if (IsNumeric(NC) == false | NC.ToString.Length < 10) {
return false;
}
string vnc = NC.ToString;
int pos = 10;
int sum = 0;
for (i = 0; i <= 8; i++) {
sum += int.Parse(vnc.ToCharArray()(i).ToString()) * pos;
pos = pos - 1;
}
int remind = sum % 11;
int controlNum = int.Parse(vnc.ToCharArray()(9));
if (remind <= 2) {
if (controlNum == remind) {
return true;
} else {
return false;
}
} else {
if ((11 - remind) == controlNum) {
return true;
} else {
return false;
}
}