הפורום נסגר!

במקומו נפתח פורום חדש, טוב יותר בהרבה מובנים. >>>>
אתם מוזמנים להצטרף אליו, בואו!

ההצטרפות לפורום התכנות החדש כרוכה בתשלום חודשי סמלי.

ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

שיתוף של ידע פרקטי, ספריות, קוד, ודוקמנטציה ברוחב לב החברים היקרים.

ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי avr416 » 30 אוגוסט 2015, 20:16

מצ"ב קובץ של 3 מחלקות סטטיות שבודקות תקינות של מיילים, ת.ז. ואשראי.
עדכנתי את השינויים גם בקובץ..
ValidationNew.rar

העקרונות לת.ז. ואשראי נעשו ע"פ המבואר כאן, כאן, וכאן.
אני מצרף גם את הקוד ואשמח לשמוע הערות והארות!!
פונקציה לבדיקת ת.ז. (מתוקן):
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;
}
}

ולגבי הבדיקה של המייל כבר חפרנו בפורום מספיק :lol:
בהצלחה לכולם!!
אין לך את ההרשאות המתאימות על מנת לצפות בקובץ המצורף להודעה זאת.
נערך לאחרונה על ידי avr416 בתאריך 30 אוגוסט 2015, 23:22, נערך 3 פעמים בסך הכל.
avr416
משתמש וותיק
 
הודעות: 853
הצטרף: 14 אפריל 2015, 15:53
שלח תודה: 1074 פעמים
קיבל תודה: 442 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי רחמים » 30 אוגוסט 2015, 20:32

כדאי ששתי הפונקציות הנ"ל ידעו להגיב נכון גם במקרה שהפרמטר המועבר אליהן הוא NULL או DBNULL
סמל אישי של המשתמש
רחמים
משתמש וותיק
 
הודעות: 1215
הצטרף: 02 יולי 2013, 14:31
שלח תודה: 469 פעמים
קיבל תודה: 454 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי רחמים » 30 אוגוסט 2015, 20:34

דבר נוסף אם תעודת הזהות קצרה מ9 ספרות נסה למלא את החסר באפסים ואז לבדוק אם זה תקין ולא מייד להחזיר שקר
אגב כל הקישורים שהבאת חסומים לי בנטפרי משום מה. כמדומה שבנתיב זה היה פתוח לי...
בכל אופן ראה כאן זו פונקציה שכתב ידידנו 'מאקרו'
סמל אישי של המשתמש
רחמים
משתמש וותיק
 
הודעות: 1215
הצטרף: 02 יולי 2013, 14:31
שלח תודה: 469 פעמים
קיבל תודה: 454 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי avr416 » 30 אוגוסט 2015, 20:49

רחמים כתב:דבר נוסף אם תעודת הזהות קצרה מ9 ספרות נסה למלא את החסר באפסים ואז לבדוק אם זה תקין ולא מייד להחזיר שקר
אגב כל הקישורים שהבאת חסומים לי בנטפרי משום מה. כמדומה שבנתיב זה היה פתוח לי...
בכל אופן ראה כאן זו פונקציה שכתב ידידנו 'מאקרו'

הנה קבצי PDF:
חישוב מספר כרטיס אשראי ישראכרט.pdf

חישוב מספר כרטיס אשראי.pdf

חישוב ספרת ביקורת של תעודת זהות ישראלית.pdf

לגבי ההערות - קיבלתי ואתקן בלנ"ד.
רק אין לי מושג מהו DBNULL, (כלומר אני מבין שהכוונה לערך NULL בדטה בייס, רק אינני יודע כיצד להתמודד איתו..
אשמח אם תוכל להסביר..)
לגבי הקישור שהבאת - שמחתי לראותו.. כי לפני שכתבתי את הפונקציות הנ"ל חיפשתי הרבה בגוגל ובפורום כדי למצוא חומר בנושא.. ודווקא את האשכול הזה לא ראיתי..
תודה!
אין לך את ההרשאות המתאימות על מנת לצפות בקובץ המצורף להודעה זאת.
avr416
משתמש וותיק
 
הודעות: 853
הצטרף: 14 אפריל 2015, 15:53
שלח תודה: 1074 פעמים
קיבל תודה: 442 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי רחמים » 30 אוגוסט 2015, 20:55

תכתוב כך:
אם (הפרמט הוא נאל || דיבינאל) אז {החזר שקר או זרוק חריג} מה שנראה לך;
סמל אישי של המשתמש
רחמים
משתמש וותיק
 
הודעות: 1215
הצטרף: 02 יולי 2013, 14:31
שלח תודה: 469 פעמים
קיבל תודה: 454 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי avr416 » 30 אוגוסט 2015, 21:23

רחמים כתב:תכתוב כך:
אם (הפרמט הוא נאל || דיבינאל) אז {החזר שקר או זרוק חריג} מה שנראה לך;

כתבתי כך:
csharp code
if (numOfTeudatZehut.Length > 9||string.IsNullOrEmpty(numOfTeudatZehut))
return false;

אינני יודע איך לכתוב את הif לגבי הdbnull.
כמו כן, הפונקציה מקבלת סטרינג ולכן אינני מבין כיצד הסטרינג יכיל dbnull האם זה לא סוג שונה?
avr416
משתמש וותיק
 
הודעות: 853
הצטרף: 14 אפריל 2015, 15:53
שלח תודה: 1074 פעמים
קיבל תודה: 442 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי רחמים » 30 אוגוסט 2015, 22:03

אכן אתה צודק, אם תעביר כפרמט DBNULL תקבל שגיאה כי חייב להעביר מחרוזת
לגבי הבדיקה שכתבת חייבים לבדוק קודם אם הוא NULL ורק אחר כך את האורך כי אם הוא באמת נאל ותנסה לבדוק אורך תקבל שגיאת זמן ריצה.
סמל אישי של המשתמש
רחמים
משתמש וותיק
 
הודעות: 1215
הצטרף: 02 יולי 2013, 14:31
שלח תודה: 469 פעמים
קיבל תודה: 454 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי avr416 » 30 אוגוסט 2015, 23:22

עדכנתי את הקובץ כדבריך!!
יישר כח!
avr416
משתמש וותיק
 
הודעות: 853
הצטרף: 14 אפריל 2015, 15:53
שלח תודה: 1074 פעמים
קיבל תודה: 442 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי רחמים » 30 אוגוסט 2015, 23:48

חשבתי על עוד כמה שיפורים
csharp code
public static bool IsValidTZ(string numOfTeudatZehut)
{

if (string.IsNullOrWhiteSpace(numOfTeudatZehut) || numOfTeudatZehut.Length > 9)
return false;

numOfTeudatZehut = numOfTeudatZehut.PadLeft(9, '0');

int sumAll = 0;

for (int i = 9; i > 0; i--)
{
int x = 0;
if (!int.TryParse(numOfTeudatZehut[i - 1].ToString(), out x))
return false;

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;
}
סמל אישי של המשתמש
רחמים
משתמש וותיק
 
הודעות: 1215
הצטרף: 02 יולי 2013, 14:31
שלח תודה: 469 פעמים
קיבל תודה: 454 פעמים

Re: ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

הודעהעל ידי דוד ל.ט. » 31 אוגוסט 2015, 10:49

יש המון מה לשפר... וזה די מתסכל כי כמעט כל קוד שנכתוב בחיים נמצא מישהו שכתב יותר יעיל או פשוט...
רחמים השיפורים שלך נכונים מאוד, אבל אם כתבת חזרה קטע קוד איך נכשלת בשורה כמו 25... אני מוכרח לומר שגם הקוד המקורי של אברהם יפה מאוד, היה לוקח לי חתיכת זמן לכתוב ככה. אבל בגלל זה, אני פשוט לא כותב אני מעתיק ממה שכותבים אחרים... כמו פה
http://rosettacode.org/wiki/Luhn_test_o ... rd_numbers ... המימוש של C# נמצא פה: http://rosettacode.org/wiki/Luhn_test_o ... mbers#C.23 בשורה אחת:
csharp code
return digits.Select((d, i) => i % 2 == digits.Length % 2 ? ((2 * d) % 10) + d / 5 : d).Sum() % 10;
סמל אישי של המשתמש
דוד ל.ט.
משתמש וותיק
 
הודעות: 2380
הצטרף: 12 יוני 2013, 11:02
שלח תודה: 1238 פעמים
קיבל תודה: 2019 פעמים

הבא

חזור אל שיתופיה

מי מחובר

משתמשים הגולשים בפורום זה: all bots ו 0 אורחים