مقدمة الي تشفير الحروف الأبجدية العربية

مقدمة
الحروف العربية مظلومة قليلا و غاليا اي مبرمج يعاني أحيانا في التعامل مع الحروف العربية تحديدا او قد يعاني أيضا حين  يريد التعامل مع اي حروف مكتوبة بلغة أخري غير اللغة الإنجليزية و في هذا الموضوح سأحاول أن أوضح كيفية تشفير الحروف العربية فقط

الفكرة
الحروف بشكل عام لها جداول وداخل هذه الجداول ستجد أن الحروف مرتبة برقم مسلسل و ايضا لها رقم  سداسي عشري  أو بمعني أدق كل حرف في جداول الحروف له مميزات يتم استخدامها للتفريق بينه و بين باق الحروف

الأمثلة التالية توضح كيفية الحصول علي الرقم المسلسل الخاص بأي حرف
مثال 1: الكود التالي يوضح مثال بسيط لكيفية الحصول علي الرقم المسلسل الخاص بحرف الياء التي تحتها نقطتان
Dim c As Char "ي"c
Me.Text Convert.ToInt32(c)

مثال 2: أيضا الكود التالي يوضح كيفية الحصول علي الرقم المسلسل الخاص بحرف الهمزة
Dim c As Char "ء"c
Me.Text Convert.ToInt32(c)

من الأمثلة أعلاه ستكتشف ان الرقم المسلسل بالحروف العربية يبدأ من الرقم 1569 , وينتهي بالرقم 1610
الملحوظة الهامة هنا هي أن الرقم المسلسل يبدأ دوما برقم هو الرقم 1
وفكرة التشفير في هذا الموضوع سوف تعتمد علي iهذا الرقم المسلسل الخاص بكل حرف

و الفكرة يمكن تلخيصها في الخطوات التالية
تحديد الحرف
تحويل الحرف الي رقمه المسلسل في جدول الحروف
التخلص من الرقم 1 الذي تبدأ به الأرقام المسلسلة
أخير نحصل علي رقم هو عبارة عن تشفير بسيط لهذا الحرف

الكود التالي يوضح كيفية تشفير اي حرف من حروف اللغة العربية و لقد ثم كتابته علي هيئة دالة بحيث تمرر لها اي حرف من حروف اللغة العربية فتحصل مباشرة علي الرقم المشفر الذي يقابل هذا الحرف

  Private Function EncodeCahr(As Char) As Integer
        Dim result 
As Integer 0
        result 
+= Convert.ToInt32(c)في السطر التالي ناخذ فقط الثلاثة ارقام الأولي الموجودة علي يمين الرقم 1
        result 
result Mod 1000
        Return result
  End 
Function 


حاول عزيزي القارئ أن تستخدم الدالة مع حروف عربية فقط و لتري ما سيحدث معك

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

الكود التالي يوضح كيفية فك التشفير ولقد كتبته أيضا علي هيئة دالة بحيث تمرر لها الرقم فتحصل علي الحرف الأصلي

Private Function DecodeChar(value As Integer) As Char
        Dim c 
As String value.ToString()
 
       c c.PadLeft(c.Length 1"1"c)
 
       Return Convert.ToChar(Integer.Parse(c))End Function




الأن عزيزي القارئ حاول أن تمرر الرقم المشفر الذي حصلت عليه من الدالة الأولي أعلاه و لتري ماذا سيحدث معك

من المؤكد ان الهدف من الموضوع هو ليس تشفير حرفا واحدا من الحروف العربية لكن الهدف هو تشفير كلمة مكتوبة باللغة العربية

الكود التالي عبارة عن دالة تمرر لها الكلمة المكتوبة بأحرف عربية فتحصل علي التكست المقابل لها و هو عبارة عن تشفير لهذه الكلمة
و الفكرة تنحصر باننا نقوم بعمل حلقة تكرارية علي كل حرف موجود في الكلمة العربية و نحول كل حرف في الكلمة الي رقم  ثم نقوم بدمج تلك الأرقام معا بعد أن نضيف فراغا بينها و نحولها الي تكست


 Private Function EncodeString(As String) As String
        Dim result 
As String ""
 
       For i 0 To s.Length 1
            Dim c 
As Char s(i)
 
           result += " "c
            result 
+= EncodeCahr(c).ToString
        Next
        Return result
.TrimStart(" "c)
 
End Function 




عملية فك التشفير هي عملية عكسية
نأخذ التكست المشفر و نقوم بعمل حلقةتكرارية علي كل حرف ثم نتخلص من الفراغات بين الأرقام ثم نقوم بتحويل الأرقام الي حروف مرة أخري و الكود التالي يوضح شكل الدالة



 Private Function DecodeString(As String) As String
        Dim result 
As String ""
 
       Dim values As String() = s.Split(" "c)
 
       For i As Integer 0 To values.Length 1
            Dim value 
As Integer Integer.Parse(values(i).ToString)
 
           Dim c As Char DecodeChar(value)
 
           result += c.ToString
        Next
        Return result
 End 
Function


الكود التالي يوضح كيفية التشفير و فك التشفير


    Dim encoded As String EncodeString("عمر")
 
   Me.Text DecodeString(encoded)

Comments

Popular posts from this blog

VB.NET Translucent Control using GDI+

Add Custom Event to a Class in VB.NET