اذهب الي المحتوي
أوفيسنا

التحقق من صحة السجل المدني السعودي


الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

مرفق ملف أكسل يمكن استخدامه لإضافة الاسماء مع رقم الهوية الوطنية وأي بيانات أخرى

ويمكنه التحقق من صحة الرقم عن طريق معادلة تم إضافتها بالتنسيق الشرطي

ملاحظة : عملية التحقق بالكود اسهل بكثير ولكن حبيت استخدام بالتنسيق الشرطي كنوع من التحدي ولتوضيخ امكانيات الأكسل

2018-01-11_225037.jpg

s.rar

رابط هذا التعليق
شارك

9 دقائق مضت, سليم حاصبيا said:

الأقضل هذه المعادلة للتنسيق الشرطي التي تقوم بنفس العمل


=LEN(C2)*ISNUMBER(C2)=10

 

شكرا اخي سليم على هذه الاضافة

ولكن الخوارزمية ليست فقط التحقق من طول رقم السجل المدني 

رابط هذا التعليق
شارك

2 دقائق مضت, أبوأحـمـد said:

شكرا اخي سليم على هذه الاضافة

ولكن الخوارزمية ليست فقط التحقق من طول رقم السجل المدني 

ارجو شرح  الخوارزمية التي تريد ها

رابط هذا التعليق
شارك

1 دقيقه مضت, أبوأحـمـد said:

معك حق فهي طويلة وغير مفهومة عندما نستخدمها كصيغة

اعرف ذلك و لكن ما هو الشرط (او الشروط ) لتلوين الخلية 

اذ ممكن ان اجد لك معادلة اقصر و بالتالي اخف ثقلاً على الذاكرة

رابط هذا التعليق
شارك

هذه بالكود 

    Private Function ID_Val(ByVal SEGEL_NO As String) As Boolean
        On Error Resume Next
        Dim i, TOT, ten As Integer
        Dim TEMP, FIN As String
        TOT = 0
        For i = 1 To 9
            If i Mod 2 <> 0 Then
                TEMP = (CInt(Mid(SEGEL_NO, i, 1)) * 2)
                If Len(TEMP) = 1 Then
                    TEMP = "0" & (CInt(Mid(SEGEL_NO, i, 1)) * 2)
                Else
                    TEMP = (CInt(Mid(SEGEL_NO, i, 1)) * 2)
                End If
                TOT = TOT + CInt(Mid(TEMP, 1, 1)) + CInt(Mid(TEMP, 2, 1))
            Else
                TOT = TOT + CInt(Mid(SEGEL_NO, i, 1))
            End If
        Next
        FIN = Format(TOT, "00")
        ten = CInt(Mid(SEGEL_NO, 10, 1))
        ID_Val = (CInt(Mid(FIN, 2, 1)) = ten) Or (ten = 10 - CInt(Mid(FIN, 2, 1)))

    End Function

 

الخوارزمية باختصار 

 نضرب الأعداد الفردية من رقم السجل المدني بـ 2

ثم نجمع الآحاد مع العشرات ونضيف معهم مجموع الأعداد الزوجية

وفي النهاية يكون معنا عدد مكون من آحاد وعشرات

فإذا تشابه الآحاد مع آخر رقم من السجل المدني فهو صحيح

أو ننقص 10 من آحاد الناتج فإذا تشابه مع آخر رقم من السجل المدني فهو صحيح

  • Like 2
رابط هذا التعليق
شارك

قمت بتقسيم الصيغة الطويلة لتكون اوضح

=OR(
VALUE(MID(
MID(TEXT(MID(C2;1;1)*2;"00");1;1)+MID(TEXT(MID(C2;1;1)*2;"00");2;1)+
MID(TEXT(MID(C2;3;1)*2;"00");1;1)+MID(TEXT(MID(C2;3;1)*2;"00");2;1)+
MID(TEXT(MID(C2;5;1)*2;"00");1;1)+MID(TEXT(MID(C2;5;1)*2;"00");2;1)+
MID(TEXT(MID(C2;7;1)*2;"00");1;1)+MID(TEXT(MID(C2;7;1)*2;"00");2;1)+
MID(TEXT(MID(C2;9;1)*2;"00");1;1)+MID(TEXT(MID(C2;9;1)*2;"00");2;1)+
MID(C2;2;1)+MID(C2;4;1)+MID(C2;6;1)+MID(C2;8;1);2;1))
=
VALUE(MID(C2;10;1))
;
VALUE(MID(C2;10;1))
=
10-VALUE(MID(
MID(TEXT(MID(C2;1;1)*2;"00");1;1)+MID(TEXT(MID(C2;1;1)*2;"00");2;1)+
MID(TEXT(MID(C2;3;1)*2;"00");1;1)+MID(TEXT(MID(C2;3;1)*2;"00");2;1)+
MID(TEXT(MID(C2;5;1)*2;"00");1;1)+MID(TEXT(MID(C2;5;1)*2;"00");2;1)+
MID(TEXT(MID(C2;7;1)*2;"00");1;1)+MID(TEXT(MID(C2;7;1)*2;"00");2;1)+
MID(TEXT(MID(C2;9;1)*2;"00");1;1)+MID(TEXT(MID(C2;9;1)*2;"00");2;1)+
MID(C2;2;1)+MID(C2;4;1)+MID(C2;6;1)+MID(C2;8;1);2;1))
)

 

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information