احب ان انبه ان هذا المقال استكمال للمشاركات الواردة على هذا الرابط فان لم تطلع عليه انصحك بزيارته وقرائته بعناية وتحميل الامثلة الواردة به على الرابط التالى: http://vb4arb.com/vb/showthread.php?1008 كل ما هناك ان الموضوع هنا يستهدف امرا يمكن ان نعتبره مجازا جملة عارضة وسط الفقرة وذلك بعد اذن استاذا (كمال فرحان) صاحب الموضوع الأصلى احب ان انبه ايضا ان كل كلمة قمت بكتابتها هنا لم يتم نقلها عن اى منتدى او صفحة اوكتاب او حتى مترجمة من مرجع اخر وهى من كتاباتى الشخصية اهديها لاعضاء منتدانا الحبيب لينفرد حقا وحصريا بهذا الموضوع وهى لكم جميعا ويمكنكم استغلالها مجانا فقط دعوة لى بظهر الغيب كما ارجوا من من سيقوم باستخدامها تجاريا بالتبرع بما يعادل واحد دولار فقط للجنة الزكاة الشرعية بمدينته عن كل نسخة قام باصدارها مستخدما الدوال المذكورة هنا بغرض الاستخدام التجارى اخوكم (Ghaderws)
رسم الباركود بالترميز (Code128)
لماذا ال(Code128)؟: ال(Code128) هو ترميز عالمى تم الاتفاق عليه من قبل المنظمات فى امريكا واوروبا ويمكنه من ترميز جميع الحروف القابلة للطباعة ويحمل فى داخله ثلاثة فئات يمكنكم استخدامها بنائا على جدول لتحويل القيم خاصة بكل حرف قابل للطباعة واقصد بها الحروف التى تحمل فى جدول الاسكى القيم المحصورة بين الارقام (32 و 126) لذا فإن هذا الترميز يغنيك عن استخدام اى ترميز اخر كما سنرى . ال(Code128) يوفر لك مساحة عند طباعة للباركود الخاص بالارقام نتيجة لامكانية اختزال الارقام كل رقمين يمكن الاستعاضة عنهم برقم واحد فقط لذا فإن حجم الباركود اثناء الطباعة سيكون اقل فى الحجم من اى باركود اخر كما سنرى عند استخدام الفئة (C) فيما يلى هذا الامر سيجعلكم تتركون كل انواع الترميز التى كنتم تستخدمونها ال(Code128) يمكن لجميع قارئات الباركود قرائته وفهمه دون الحاجة لاعادة برمجتها لذا ستجدونه معتمد من قبل القارئات دون الحاجة لتعريفها عليه الامر الذى سيجعل لبرامجكم مصداقية واحترافية اكثر والخروج من المحلية للعالمية خطة الدرس: قمت بتقسيم هذا الدرس إلى ثلاثة اقسام وفضلت الا اضع اى جزء بالمنتدى إلا بعد اكتمال جميع الاجزاء لتكون مرجعا يسهل على الباحث الوصول المباشر إلى ما يريد دون ارهاقه فى متابعة جميع المشاركات وتكون المشاركات فيما بعد خاصة باستفسارات والاعضاء ومناقشاتهم والاجابة عليها والاجزاء هى: 1-تعريف بال(Code128) 2-خوارزمية رسم الباركود باستخدام ال(Code128) 3-افكار حول الفئة (C) لل(Code 128) أولا: تعريف بال(Code128) يعتمد الباركود عموما على مجموعة من الخطوط البيضاء والسوداء بتشفير معين تختلف باختلاف نوع الترميز المستخدم ويختلف عدد تلك الخطوط المستخدمة من نوع لاخر وال(Code128) يستخدم عدد (11) ما بين اسود وابيض لكل حرف تقوم بتشفيره باستخدام هذا النوع من الترميز وهو ععد اقل نسبيا من باقى انواع الترميز الاخرى التى تحتاج ما بين 12 و14 خط لترميز الحرف الواحد ويحتاج إلى بداية من ثلاثة بدايات توضح ان الكود المستخدم فى الترميز هو ال(Code128) والفئة المستخدمة فى الترميز - فكما ذكرنا يشمل هذا النوع من الترميز ثلاثة فئات – وينتهى الكود بحرف تكميلى للنص المراد تكويده ونهاية ثابتة لجميع الفئات ويمكن تحويل جميع الحروف القابلة للطباعة فى جدول الاسكى للقيم المحصورة بين الارقام (32 و 126) بعد تحويلها لشكل يشبه كثيرا (الارقام الثنائية) والتى من المعروف انها تشمل ارقام الصفر والواحد فقط وتعبر الاصفار عن الخطوط السوداء بينما يعبر الرقم واحد عن الخطوط البيضاء انظر الصورة التالية والتى تم تشفير النص (VB4Arab)باستخدام ال(Code128) الفئة (B)
ويحتوى ال(Code128) على ثلاثة فئات يمكن استخدامه هى (A,B,C) لكل منها قدرة تختلف عن الاخرى وبداية تختلف عن الاخرى وتعد الفئة (B) هى الفئة الاكثر شيوعا واستخداما لكننا سنقوم بعمل خوارزمية تعمل للثلاثة فئات بإذن الله. بالتأكيد انت تتسائل الان من اين لنا ان نعرف الارقام الباينرى التى تعبر عن ترميز الحروف ولن ادعك فى تلك الحيرة فالرابط التالى ستجد به الجدول الذى تريد: http://www.adams1.com/128table.html قم بزيارة الجدول من الرابط السابق ستجد القيمة (Value) تعبر عن قيمة الحرف المستخدم فى هذا الترميز والقيمة (Code A) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (A) والقيمة (Code B) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (B) والقيمة (Code C) تعبر عما يطبعة الترميز إذا ما استخدمت الفئة (C) والقيمة (Pattern B S B S B S) يعبر فيها الحرف (B) عن عدد الخطوط السوداء ويعبر الحرف (S) عن عدد الخطوط البيضاء واخيرا فإن (What ASCII Code Do I Print?) تعنى قيمة ذلك الحرف بجدول الاسكى اشعر بأنك الأن تبتسم لفهم الامر لقد وجدت فى نهاية هذا الجدول بالتأكيد الترميز الخاص ببداية كل فئة اشرنا اليها وتعرف عند استخدامها ماذا سيكون الناتج من استخدامها ووجدت ايضا فى نهاية الجدول الترميز الخاص بإيقاف جميع الفئات ولكن ماذا عن النص التكميلى لاختبار الحروف والموجود فى الصورة قبل النهاية الثابتة انه لا يوجد بهذا الجدول؟؟؟ كيف اضيفة للترميز وماذا ان لم اقم باضافتة ماذا سيحدث؟؟؟ سأجيبك حالا فقط امهلنى حتى تقرأ كلماتى القادمة لن يمكن لقارئ الباركود قرائة هذا الترميز مالم تقم بإضافة الحرف الخاص بتكملة النص ولاضافتة قانون يجب حسابه لنرى اولا ما هو القانون ومن اين اتيت انا به اليك مصدرى على الرابط التالى : http://www.adams1.com/128code.html اشعر ان بعضكم لم يفهم هذا القانون لا الومكم انا شخصيا لم افهمه للوهلة الاولى لنرى ماذا يريد هذا القانون منا لحساب النص التكميلى: 1-انه يرغب منا استخراج قيمة الحروف المراد كتابتها بهذا الكود من الجدول ستجدها بالجدول الذى ذهبت الى رابطه فى العمود الأول من الشمال كما ذكرنا 2-انه يريد منا ايضا ضرب هذه القيمة فى مكان الحرف حسب ترتيبه 3-انه يريد مجموع كل هذه القيم 4-واخيرا يرغب فى حساب باقى قسمة الناتج على رقم (103) اجد الكثير منكم يسقط على الارض من كثرة الضحك لتعقيد القانون لكن الامر اسهل من ان يكون معقدا حتى ! اجده سهل وبسيط ولن يقف عقبة امامنا اذا ما قمنا بتحويله إلى معادلة رياضية بسيطة السنا مبرمجين ؟؟؟ إذا لن تشكل هذه المعادلة الرياضية عقبة فى طريقنا لنأخذ الباركود السابق الخاص بتشفير النص (VB4Arab) مثال لفهم الامر لنرى ما سيكون لقد استخدمنا فى ترميزها (Start Code B) ثم الحروف (VB4Arab) ثم الحرف المكمل وأخيرا (Stop all Code) سنترك الحرف المكمل و (Stop all Code) جانبا لانهم لا يدخلون فى حساب الحرف المكمل للنص اما الباقى فسيدخلون معنا بقيمهم المذكورة فى الجدول لحساب الحرف المكمل للنص لنرى. 1-(Start Code B) كانت قيمته فى الجدول (104) 2-الحرف (V) وهو الحرف الأول من النص المراد تشفيره وكانت قيمته (54) سنضرب تلك القيمة فى (1) = (54) 3-الحرف (B) وهو الحرف الثانى من النص المراد تشفيره وكانت قيمته (34) سنضرب تلك القيمة فى (2) = (68) 4-الحرف (4) وهو الحرف الثالث من النص المراد تشفيره وكانت قيمته (20) سنضرب تلك القيمة فى (3) = (60) 5-الحرف (A) وهو الحرف الرابع من النص المراد تشفيره وكانت قيمته (33) سنضرب تلك القيمة فى (4) = (132) 6-الحرف (r) وهو الحرف الخامس من النص المراد تشفيره وكانت قيمته (82) سنضرب تلك القيمة فى (5) = (410) 7-الحرف (a) وهو الحرف السادس من النص المراد تشفيره وكانت قيمته (65) سنضرب تلك القيمة فى (6) = (390) 8-الحرف (b) وهو الحرف السابع من النص المراد تشفيره وكانت قيمته (66) سنضرب تلك القيمة فى (7) = (462) 9-لنقوم الان بحساب مجموع تلك النواتج (104)+(54)+(68)+(60)+(132)+(410)+(390)+(462) = (1680) 10-لنعرف الان باقى القسمة للرقم (1680) Mod (103) = (32) 11-لنبحث الان عن الحرف الذى يحمل تلك القيمة فى الجدول الخاص بهذا التشفير ... انه الحرف (@) لذا فإن الباينرى المطلوب تكوينه سيكون قيم الحروف (Start CodeB,V,B,4,A,r,a,b,@,Stop all Code) من جدول الترميز
هكذا نستطيع التشفير او الترميز بالكود (Code 128) اجد انكم جميعا تتنفسوا الصعداء الان وتقولون دعنا نجرب كتابة هذه المعادلة بالفيجوال بيسك فما اسهلها بعد ان اتضح الامر للننتقل إلى الجزء الثانى من الدرس
لقد قمت بعمل الخوارزمية السابقة التى سيكون ناتجها صورة تحمل خطوط الباركود لأى نص مراد تشفيره بعد تحديد الفئة المراد استخدامها وقد شرحت كل ما عليك معرفته فيها ما عليك سوى نسخها واستخدامها مباشرة او اسناد القيمة الناتجة إلى (PictureBox) لاظهار البار كود على الشاشة دعنا لا نضيع الوقت ونرى ماذا يمكن اضافته لهذا الدرس ثالثا: افكار حول الفئة (C) لل(Code 128) عرفنا ان الفئة (A,B) تقوم بطباعة نصوص وارقم فماذ نستفيد من الفئة (C) والتى تقوم بطباعة قيمة الحرف وليس الحرف ؟؟ من جدول القيم التابع لل(Code 128) احب ان اجعلك لتنتبه لنقطة مهمة جدا هنا وهى ان قيمة الحرف دائما ما سيتم التعبير عنها برقمين فمثلا الحرف (SP) فى اول الجدول والمخصص لقيم المسطرة على الكيبور ويعطى مسافة خالية (Space) فى النصوص قيمته فى الحقيقة هى (00) وليس (0) والحرف (!) قيمته فى الحقيقة (01) وليس (1) وهكذا فبماذا سيفيدنا ذلك ؟؟؟ الم تعرفوا الى ماذا يؤدى ذلك ارى منكم من هو لم يفهم وارى منكم من يبتسم من اذنه اليمنى إلى اليسرى نعم حقا هذا ما ارمى اليه انه اختزال تتفرد به ال(Code 128) للارقام عند استخدام الفئة (C) بمعنى انك بدلا من تشفير نص رقمى يحتوى على عدد كبير من الارقام مثل (12345678901234567890) وهو رقم كبير مكون من 20 رقم سينتج عنه باركود عرضه قد يؤثر بالتالى على حجمه اثناء الطباعة يمكن اختزالة إلى (10) حروف فقط بالاستعاضة عنه بالحروف التى تحمل قيم كل رقمين متجاورين بمعنى اننا ممكن ان نعوض عن اول رقمين وهم (12) بالحرف (,) ونعوض عن الرقمين (34) بالحرف (@) ونعوض عن الرقمين (56) بالحرف (X) وهكذا ستجد انك قمت بترميز 10 حروف فقط بدلا من (20) رقم قم باضافة البداية للفئة (C) وقم بحساب الحرف التكميلى وقم بانهاء الاكواد سيقوم قارئ الباركود بقرائة الرقم المكون من (20) رقم فما رأيكم بذلك ؟؟؟ لعل احدكم يصرخ الان لينبهنى ان هذا الامر لن يجدى سوى مع الارقام الزوجية لان القيم كما ذكرت دائما ما سيتم تمثيلها برقمين اليس كذلك ؟؟ احب الا يصرخ احد وانبهه إلى ان ما يتعامل معه هنا ارقام والفت نظره إلى ان الصفر على الشمال ليس له قيمة ولن اذكر اكثر من ذلك فإن لم تعرف الحل ستصرخ إلى الابد ليس هنا فقط ! قد يمل البعض من اعادة البحث وترتيب الحروف لمعرفة الحرف الذى سيحل محل الارقام ... سالفت نظركم بكل بساطة ان الجدول الخاص بالقيم يسير بنفس ترتيب جدول الاسكى ويحمل قيم الحروف القابلة للطباعة فقط اى انه يبدأ من القيمة (32) .... بالتأكيد فهمتم ما ارمى اليه ... قم بجمع قيمه الاسكى للحرف + الرقم (32) واعد اسناد الحرف الجديد بالاسكى الناتج لك ستعرف الحرف المطلوب لاعطائك الناتج الذى تريد ... لا بأس يمكننى عمل دالة تعطينا المطلوب لا تتعبوا انفسكم وقوموا بنسخها من الكود التالى :
كود :
Function Toc(ByVal Text2CStr As String) As String
' دالة لتعويض النص المطلوب تشفيره بالارقام للفئة
' (C)
Dim X As Integer = 1
Dim NewText As String = ""
Dim Z As String = ""
Do
Z = Mid(Text2CStr, X, 2)
' اضافة رقم32 لقيمة الاسكى واستعادة الحرف الناتج بعد الاضافة
NewText = NewText & Chr(Val(Z) + 32)
X += 2
Z = Mid(Text2CStr, X, 1)
If X >= Len(Text2CStr) Then Exit Do
If Z = "" Then Exit Do
Loop
Toc = NewText
End Function
لمعلومات اخرى حول الترميز بهذا الكود يمكنك زيارة الرابط التالى :