דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. ולידציה של אימייל, תעודת זהות וכרטיסי אשראי

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

מתוזמן נעוץ נעול הועבר ארכיון code613m
13 פוסטים 4 כותבים 915 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #2

    כדאי ששתי הפונקציות הנ"ל ידעו להגיב נכון גם במקרה שהפרמטר המועבר אליהן הוא NULL או DBNULL

    פורסם במקור בפורום CODE613 ב30/08/2015 21:32 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #3

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

      פורסם במקור בפורום CODE613 ב30/08/2015 21:34 (+03:00)

      תגובה 1 תגובה אחרונה
      1
      • A מנותק
        A מנותק
        avr416
        כתב ב נערך לאחרונה על ידי
        #4

        @רחמים

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

        הנה קבצי PDF:
        חישוב מספר כרטיס אשראי ישראכרט.pdf
        חישוב מספר כרטיס אשראי.pdf
        חישוב ספרת ביקורת של תעודת זהות ישראלית.pdf
        לגבי ההערות - קיבלתי ואתקן בלנ"ד.
        רק אין לי מושג מהו DBNULL, (כלומר אני מבין שהכוונה לערך NULL בדטה בייס, רק אינני יודע כיצד להתמודד איתו..
        אשמח אם תוכל להסביר..)
        לגבי הקישור שהבאת - שמחתי לראותו.. כי לפני שכתבתי את הפונקציות הנ"ל חיפשתי הרבה בגוגל ובפורום כדי למצוא חומר בנושא.. ודווקא את האשכול הזה לא ראיתי..
        תודה!

        פורסם במקור בפורום CODE613 ב30/08/2015 21:49 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #5

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

          פורסם במקור בפורום CODE613 ב30/08/2015 21:55 (+03:00)

          תגובה 1 תגובה אחרונה
          0
          • A מנותק
            A מנותק
            avr416
            כתב ב נערך לאחרונה על ידי
            #6

            @רחמים

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

            כתבתי כך:

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

            אינני יודע איך לכתוב את הif לגבי הdbnull.
            כמו כן, הפונקציה מקבלת סטרינג ולכן אינני מבין כיצד הסטרינג יכיל dbnull האם זה לא סוג שונה?

            פורסם במקור בפורום CODE613 ב30/08/2015 22:23 (+03:00)

            תגובה 1 תגובה אחרונה
            0
            • רחמיםר מנותק
              רחמיםר מנותק
              רחמים מורחק
              כתב ב נערך לאחרונה על ידי
              #7

              אכן אתה צודק, אם תעביר כפרמט DBNULL תקבל שגיאה כי חייב להעביר מחרוזת
              לגבי הבדיקה שכתבת חייבים לבדוק קודם אם הוא NULL ורק אחר כך את האורך כי אם הוא באמת נאל ותנסה לבדוק אורך תקבל שגיאת זמן ריצה.

              פורסם במקור בפורום CODE613 ב30/08/2015 23:03 (+03:00)

              תגובה 1 תגובה אחרונה
              2
              • A מנותק
                A מנותק
                avr416
                כתב ב נערך לאחרונה על ידי
                #8

                עדכנתי את הקובץ כדבריך!!
                יישר כח!

                פורסם במקור בפורום CODE613 ב31/08/2015 00:22 (+03:00)

                תגובה 1 תגובה אחרונה
                0
                • רחמיםר מנותק
                  רחמיםר מנותק
                  רחמים מורחק
                  כתב ב נערך לאחרונה על ידי
                  #9

                  חשבתי על עוד כמה שיפורים

                  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;
                          }
                  

                  פורסם במקור בפורום CODE613 ב31/08/2015 00:48 (+03:00)

                  תגובה 1 תגובה אחרונה
                  1
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #10

                    יש המון מה לשפר... וזה די מתסכל כי כמעט כל קוד שנכתוב בחיים נמצא מישהו שכתב יותר יעיל או פשוט...
                    רחמים השיפורים שלך נכונים מאוד, אבל אם כתבת חזרה קטע קוד איך נכשלת בשורה כמו 25... אני מוכרח לומר שגם הקוד המקורי של אברהם יפה מאוד, היה לוקח לי חתיכת זמן לכתוב ככה. אבל בגלל זה, אני פשוט לא כותב אני מעתיק ממה שכותבים אחרים... כמו פה
                    http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers ... המימוש של C# נמצא פה: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#C.23 בשורה אחת:

                    return digits.Select((d, i) => i % 2 == digits.Length % 2 ? ((2 * d) % 10) + d / 5 : d).Sum() % 10;
                    

                    פורסם במקור בפורום CODE613 ב31/08/2015 11:49 (+03:00)

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    3
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי
                      #11

                      מילוי האפסים למשל הוא חסר טעם. כי איננו משנה כלל את התוצאה, לא כן?

                      פורסם במקור בפורום CODE613 ב31/08/2015 12:29 (+03:00)

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      0
                      • A מנותק
                        A מנותק
                        avr416
                        כתב ב נערך לאחרונה על ידי
                        #12

                        @דוד ל.ט.

                        המימוש של C# נמצא פה: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#C.23 בשורה אחת:

                        return digits.Select((d, i) => i % 2 == digits.Length % 2 ? ((2 * d) % 10) + d / 5 : d).Sum() % 10;
                        

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

                        תודה רבה!

                        ולגבי האפסים - אכן באלגוריתם שכתבתי אתה צודק, כי אני מתחיל מהסוף להתחלה. אולם, יש המממשים את הבדיקה ע"י שהפונקציה בהתחלה מבצעת היפוך למס' הת.ז. או הכרטיס (reverse), ואז יש חשיבות לאפסים, כיון שהבדיקה מתבצעת בצורה כזו שאת הספרה הכי ימנית מכפילים ב1 ואת הבאה אחריה ב2 וחוזר חלילה.. ואם נגיד המשתמש הקליד מס' בן 8 ספרות אז לאחר ההיפוך הוא יכפיל את הספרה הראשונה ב1 במקום ב2 והתוצאה תהיה שגויה.. (אני בניתי את האלגוריתם בסדר יורד וכך אני נותן לו בתחילה את האורך של הסטרינג וכל הזמן זה יורד, וכך בלי להפוך את הספרות הוא מתחיל לי מהספרה הימנית ואז אין את הבעיה הזאת.. אולם, אם מבצעים רוורס ועובדים בסדר עולה אז מאד חשוב לדעת מהי הספרה הראשונה).

                        פורסם במקור בפורום CODE613 ב31/08/2015 22:38 (+03:00)

                        תגובה 1 תגובה אחרונה
                        1
                        • clickoneC מנותק
                          clickoneC מנותק
                          clickone
                          כתב ב נערך לאחרונה על ידי
                          #13

                          ואחרי השאלה של צביקה (במייל....) המרתי את הקוד לבדיקת תקינות של כרטיס אשראי של אברהם לVBA עבורו.
                          הנה הוא (לא נגעתי בקוד של הC# ובשמות המשתנים. רק התאמתי לVBA)

                          Public Function validCardGenery(credit As String) As Boolean
                              If Len(credit & "") Then
                                  validCardGenery = False
                              End If
                              Dim sumAll As Integer
                                  Dim y As Integer
                                  Dim x As Integer
                                  Dim i As Integer
                              
                              'כרטיס בין 11 ל19 תוים נבדק לפי אלגוריתם המשמש לבדיקת תקינות של ת.ז.
                              If Len(credit) > 10 And Len(credit) < 20 Then
                                  y = 1
                                  'משתנה שנועד להגדיר האם להכפיל ב1 או ב2
                                  For i = Len(credit) To 1 Step -1
                                  
                                      x = CInt(Mid(credit, i, 1))
                                      If y Mod 2 = 0 Then
                                          x = x * 2
                                          If x > 9 Then
                                              x = (x Mod 10) + 1
                                          End If
                                          sumAll = sumAll + x
                                          y = y + 1
                                      Else
                                          x = x * 1
                                          sumAll = sumAll + x
                                          y = y + 1
                                      End If
                                  Next
                                  sumAll = sumAll Mod 10
                                  If sumAll Mod 10 > 0 Then
                                      validCardGenery = False
                                  Else
                                      validCardGenery = True
                                  End If
                              'אם אורך המספר בין 8 ל9 תווים - מדובר בכרטיס מסוג ישראכרט והאלגוריתם שונה
                              ElseIf Len(credit) = 8 Or Len(credit) = 9 Then
                                 
                                  y = 1
                                  'מספר הכפל כדי לבדוק אימות כרטיס
                                  'אם הכרטיס באורך 8 ספרות - מוסיף לו 0 משמאל לצורך תקינות הבדיקה
                                  If Len(credit) = 8 Then
                                      credit = "0" & credit
                                  End If
                                  
                                  
                                  For i = Len(credit) To 1 Step -1
                                     
                                      x = CInt(Mid(credit, i, 1))
                                      x = x * y
                                      sumAll = sumAll + x
                                      y = y + 1
                                  Next
                                  If sumAll Mod 11 = 0 Then
                                      validCardGenery = True
                                  Else
                                      validCardGenery = False
                                  End If
                              Else
                                  'אם המספר ארוך מדי או קצר מדי - מדובר במס' שגוי
                                  validCardGenery = False
                              End If
                          End Function
                          

                          פורסם במקור בפורום CODE613 ב07/11/2015 23:02 (+02:00)

                          אין טסט כמו פרודקשן.

                          המייל שלי urivpn@gmail.com

                          תגובה 1 תגובה אחרונה
                          3

                          בא תתחבר לדף היומי!
                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • דף הבית
                          • קטגוריות
                          • פוסטים אחרונים
                          • משתמשים
                          • חיפוש
                          • חוקי הפורום