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

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

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

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

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