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

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

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

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

מתוזמן נעוץ נעול הועבר ארכיון code613m
13 פוסטים 4 כותבים 915 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום