עדכנתי את השינויים גם בקובץ..
העקרונות לת.ז. ואשראי נעשו ע"פ המבואר כאן, כאן, וכאן.
אני מצרף גם את הקוד ואשמח לשמוע הערות והארות!!
פונקציה לבדיקת ת.ז. (מתוקן):
csharp code
public static class ValidTehudatZehut
{
public static bool IsValidTZ(string numOfTeudatZehut)
{
int sumAll = 0;
if (numOfTeudatZehut.Length > 9||string.IsNullOrEmpty(numOfTeudatZehut))
return false;
else if(numOfTeudatZehut.Length<9)
{
while (numOfTeudatZehut.Length < 9)
{
numOfTeudatZehut = "0" + numOfTeudatZehut;
}
}
for (int i = 9; i > 0; i--)
{
int x = Convert.ToInt32(numOfTeudatZehut.Substring(i-1, 1));
if (i % 2 == 0)
{
x = x * 2;
if (x > 9)
x = (x % 10) + 1;
sumAll += x;
}
else
{
x = x * 1;
sumAll += x;
}
}
sumAll = sumAll % 10;
if (sumAll % 10 > 0)
return false;
else
return true;
}
}
הפונקציה שבודקת כרטיסי אשראי:
csharp code
public static bool validCardGenery(string credit)
{
if(string.IsNullOrEmpty(credit))
{
return false;
}
int sumAll = 0;
//כרטיס בין 11 ל19 תוים נבדק לפי אלגוריתם המשמש לבדיקת תקינות של ת.ז.
if (credit.Length > 10 && credit.Length < 20)
{
int y = 1;//משתנה שנועד להגדיר האם להכפיל ב1 או ב2
for (int i = credit.Length; i > 0; i--)
{
int x = Convert.ToInt32(credit.Substring(i-1, 1));
if (y % 2 == 0)
{
x = x * 2;
if (x > 9)
x = (x % 10) + 1;
sumAll += x;
y++;
}
else
{
x = x * 1;
sumAll += x;
y++;
}
}
sumAll = sumAll % 10;
if (sumAll % 10 > 0)
return false;
else
return true;
}
//אם אורך המספר בין 8 ל9 תווים - מדובר בכרטיס מסוג ישראכרט והאלגוריתם שונה
else if (credit.Length == 8 || credit.Length == 9)
{
int y = 1;//מספר הכפל כדי לבדוק אימות כרטיס
//אם הכרטיס באורך 8 ספרות - מוסיף לו 0 משמאל לצורך תקינות הבדיקה
if (credit.Length == 8)
{
credit = credit.Insert(0, "0");
}
for (int i = credit.Length; i > 0; i--)
{
int x = Convert.ToInt32(credit.Substring(i, 1));
x = x * y;
sumAll += x;
y++;
}
if (sumAll % 11 == 0)
return true;
else
return false;
}
//אם המספר ארוך מדי או קצר מדי - מדובר במס' שגוי
else
return false;
}
}
ולגבי הבדיקה של המייל כבר חפרנו בפורום מספיק
בהצלחה לכולם!!