تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
رسم الباركود برمجيا باستخدام (Code128)
#1
كاتب الموضوع : Ghaderws


بسم الله الرحمن الرحيم

احب ان انبه ان هذا المقال استكمال للمشاركات الواردة على هذا الرابط فان لم تطلع عليه انصحك بزيارته وقرائته بعناية وتحميل الامثلة الواردة به على الرابط التالى:
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) اجد انكم جميعا تتنفسوا الصعداء الان وتقولون دعنا نجرب كتابة هذه المعادلة بالفيجوال بيسك فما اسهلها بعد ان اتضح الامر للننتقل إلى الجزء الثانى من الدرس


الملفات المرفقة
.rar   Code128.rar (الحجم : 68.62 ك ب / التحميلات : 404)
}}}}
تم الشكر بواسطة:
#2
ثانيا: خوارزمية رسم الباركود باستخدام ال(Code128)

كود :
[align=left]Function Code128(ByVal TheText As String, ByVal CodeLetter As String) As Image
' TheText متغير خاص بالنص المراد تشفيره
' CodeLetter متغير خاص بالفئة المراد استخدامها
Dim Binaryz As String = "" 'متغير سيحمل النص بعد تحويله إلى باينرى
Dim I As Integer
Dim NumCode As Integer 'متغير سيحمل قيمة حساب النص التكميلى
If CodeLetter = "A" Or CodeLetter = "a" Then
NumCode = 103
Binaryz = "00101111011"
End If
If CodeLetter = "B" Or CodeLetter = "b" Then
NumCode = 104
Binaryz = "00101101111"
End If
If CodeLetter = "C" Or CodeLetter = "c" Then
NumCode = 105
Binaryz = "00101100011"
End If
' الكود التالى سيقوم باسناد قيمة الحرف بالباينرى حسب الجدول الخاص بالكود 128
For I = 1 To Len(TheText)
NumCode = NumCode + ((Asc(Mid(TheText, I, 1)) - 32) * I)
Select Case Asc(Mid(TheText, I, 1))
Case 32
Binaryz = Binaryz & "00100110011"
Case 33
Binaryz = Binaryz & "00110010011"
Case 34
Binaryz = Binaryz & "00110011001"
Case 35
Binaryz = Binaryz & "01101100111"
Case 36
Binaryz = Binaryz & "01101110011"
Case 37
Binaryz = Binaryz & "01110110011"
Case 38
Binaryz = Binaryz & "01100110111"
Case 39
Binaryz = Binaryz & "01100111011"
Case 40
Binaryz = Binaryz & "01110011011"
Case 41
Binaryz = Binaryz & "00110110111"
Case 42
Binaryz = Binaryz & "00110111011"
Case 43
Binaryz = Binaryz & "00111011011"
Case 44
Binaryz = Binaryz & "01001100011"
Case 45
Binaryz = Binaryz & "01100100011"
Case 46
Binaryz = Binaryz & "01100110001"
Case 47
Binaryz = Binaryz & "01000110011"
Case 48
Binaryz = Binaryz & "01100010011"
Case 49
Binaryz = Binaryz & "01100011001"
Case 50
Binaryz = Binaryz & "00110001101"
Case 51
Binaryz = Binaryz & "00110100011"
Case 52
Binaryz = Binaryz & "00110110001"
Case 53
Binaryz = Binaryz & "00100011011"
Case 54
Binaryz = Binaryz & "00110001011"
Case 55
Binaryz = Binaryz & "00010010001"
Case 56
Binaryz = Binaryz & "00010110011"
Case 57
Binaryz = Binaryz & "00011010011"
Case 58
Binaryz = Binaryz & "00011011001"
Case 59
Binaryz = Binaryz & "00010011011"
Case 60
Binaryz = Binaryz & "00011001011"
Case 61
Binaryz = Binaryz & "00011001101"
Case 62
Binaryz = Binaryz & "00100100111"
Case 63
Binaryz = Binaryz & "00100111001"
Case 64
Binaryz = Binaryz & "00111001001"
Case 65
Binaryz = Binaryz & "01011100111"
Case 66
Binaryz = Binaryz & "01110100111"
Case 67
Binaryz = Binaryz & "01110111001"
Case 68
Binaryz = Binaryz & "01001110111"
Case 69
Binaryz = Binaryz & "01110010111"
Case 70
Binaryz = Binaryz & "01110011101"
Case 71
Binaryz = Binaryz & "00101110111"
Case 72
Binaryz = Binaryz & "00111010111"
Case 73
Binaryz = Binaryz & "00111011101"
Case 74
Binaryz = Binaryz & "01001000111"
Case 75
Binaryz = Binaryz & "01001110001"
Case 76
Binaryz = Binaryz & "01110010001"
Case 77
Binaryz = Binaryz & "01000100111"
Case 78
Binaryz = Binaryz & "01000111001"
Case 79
Binaryz = Binaryz & "01110001001"
Case 80
Binaryz = Binaryz & "00010001001"
Case 81
Binaryz = Binaryz & "00101110001"
Case 82
Binaryz = Binaryz & "00111010001"
Case 83
Binaryz = Binaryz & "00100010111"
Case 84
Binaryz = Binaryz & "00100011101"
Case 85
Binaryz = Binaryz & "00100010001"
Case 86
Binaryz = Binaryz & "00010100111"
Case 87
Binaryz = Binaryz & "00010111001"
Case 88
Binaryz = Binaryz & "00011101001"
Case 89
Binaryz = Binaryz & "00010010111"
Case 90
Binaryz = Binaryz & "00010011101"
Case 91
Binaryz = Binaryz & "00011100101"
Case 92
Binaryz = Binaryz & "00010000101"
Case 93
Binaryz = Binaryz & "00110111101"
Case 94
Binaryz = Binaryz & "00001110101"
Case 95
Binaryz = Binaryz & "01011001111"
Case 96
Binaryz = Binaryz & "01011110011"
Case 97
Binaryz = Binaryz & "01101001111"
Case 98
Binaryz = Binaryz & "01101111001"
Case 99
Binaryz = Binaryz & "01111010011"
Case 100
Binaryz = Binaryz & "01111011001"
Case 101
Binaryz = Binaryz & "01001101111"
Case 102
Binaryz = Binaryz & "01001111011"
Case 103
Binaryz = Binaryz & "01100101111"
Case 104
Binaryz = Binaryz & "01100111101"
Case 105
Binaryz = Binaryz & "01111001011"
Case 106
Binaryz = Binaryz & "01111001101"
Case 107
Binaryz = Binaryz & "00111101101"
Case 108
Binaryz = Binaryz & "00110101111"
Case 109
Binaryz = Binaryz & "00001000101"
Case 110
Binaryz = Binaryz & "00111101011"
Case 111
Binaryz = Binaryz & "01110000101"
Case 112
Binaryz = Binaryz & "01011000011"
Case 113
Binaryz = Binaryz & "01101000011"
Case 114
Binaryz = Binaryz & "01101100001"
Case 115
Binaryz = Binaryz & "01000011011"
Case 116
Binaryz = Binaryz & "01100001011"
Case 117
Binaryz = Binaryz & "01100001101"
Case 118
Binaryz = Binaryz & "00001011011"
Case 119
Binaryz = Binaryz & "00001101011"
Case 120
Binaryz = Binaryz & "00001101101"
Case 121
Binaryz = Binaryz & "00100100001"
Case 122
Binaryz = Binaryz & "00100001001"
Case 123
Binaryz = Binaryz & "00001001001"
Case 124
Binaryz = Binaryz & "01010000111"
Case 125
Binaryz = Binaryz & "01011100001"
Case 126
Binaryz = Binaryz & "01110100001"
Case 127
Binaryz = Binaryz & "01000010111"
Case 128
Binaryz = Binaryz & "01000011101"
Case 129
Binaryz = Binaryz & "00001010111"
Case 130
Binaryz = Binaryz & "00001011101"
Case 131
Binaryz = Binaryz & "01000100001"
Case 132
Binaryz = Binaryz & "01000010001"
Case 133
Binaryz = Binaryz & "00010100001"
Case 134
Binaryz = Binaryz & "00001010001"
Case 135
Binaryz = Binaryz & "00101111011"
Case 136
Binaryz = Binaryz & "00101101111"
Case 137
Binaryz = Binaryz & "00101100011"
Case 138
Binaryz = Binaryz & "0011100010100"
End Select
Next
NumCode = NumCode Mod 103[/align]
}}}}
تم الشكر بواسطة:
#3
تابع خوارزمية رسم الباركود باستخدام ال(Code128)
كود :
' الكود التالى لمعرفة الحرف المراد اضافتة لاستكمال النص
Select Case NumCode
Case 0
Binaryz = Binaryz & "00100110011"
Case 1
Binaryz = Binaryz & "00110010011"
Case 2
Binaryz = Binaryz & "00110011001"
Case 3
Binaryz = Binaryz & "01101100111"
Case 4
Binaryz = Binaryz & "01101110011"
Case 5
Binaryz = Binaryz & "01110110011"
Case 6
Binaryz = Binaryz & "01100110111"
Case 7
Binaryz = Binaryz & "01100111011"
Case 8
Binaryz = Binaryz & "01110011011"
Case 9
Binaryz = Binaryz & "00110110111"
Case 10
Binaryz = Binaryz & "00110111011"
Case 11
Binaryz = Binaryz & "00111011011"
Case 12
Binaryz = Binaryz & "01001100011"
Case 13
Binaryz = Binaryz & "01100100011"
Case 14
Binaryz = Binaryz & "01100110001"
Case 15
Binaryz = Binaryz & "01000110011"
Case 16
Binaryz = Binaryz & "01100010011"
Case 17
Binaryz = Binaryz & "01100011001"
Case 18
Binaryz = Binaryz & "00110001101"
Case 19
Binaryz = Binaryz & "00110100011"
Case 20
Binaryz = Binaryz & "00110110001"
Case 21
Binaryz = Binaryz & "00100011011"
Case 22
Binaryz = Binaryz & "00110001011"
Case 23
Binaryz = Binaryz & "00010010001"
Case 24
Binaryz = Binaryz & "00010110011"
Case 25
Binaryz = Binaryz & "00011010011"
Case 26
Binaryz = Binaryz & "00011011001"
Case 27
Binaryz = Binaryz & "00010011011"
Case 28
Binaryz = Binaryz & "00011001011"
Case 29
Binaryz = Binaryz & "00011001101"
Case 30
Binaryz = Binaryz & "00100100111"
Case 31
Binaryz = Binaryz & "00100111001"
Case 32
Binaryz = Binaryz & "00111001001"
Case 33
Binaryz = Binaryz & "01011100111"
Case 34
Binaryz = Binaryz & "01110100111"
Case 35
Binaryz = Binaryz & "01110111001"
Case 36
Binaryz = Binaryz & "01001110111"
Case 37
Binaryz = Binaryz & "01110010111"
Case 38
Binaryz = Binaryz & "01110011101"
Case 39
Binaryz = Binaryz & "00101110111"
Case 40
Binaryz = Binaryz & "00111010111"
Case 41
Binaryz = Binaryz & "00111011101"
Case 42
Binaryz = Binaryz & "01001000111"
Case 43
Binaryz = Binaryz & "01001110001"
Case 44
Binaryz = Binaryz & "01110010001"
Case 45
Binaryz = Binaryz & "01000100111"
Case 46
Binaryz = Binaryz & "01000111001"
Case 47
Binaryz = Binaryz & "01110001001"
Case 48
Binaryz = Binaryz & "00010001001"
Case 49
Binaryz = Binaryz & "00101110001"
Case 50
Binaryz = Binaryz & "00111010001"
Case 51
Binaryz = Binaryz & "00100010111"
Case 52
Binaryz = Binaryz & "00100011101"
Case 53
Binaryz = Binaryz & "00100010001"
Case 54
Binaryz = Binaryz & "00010100111"
Case 55
Binaryz = Binaryz & "00010111001"
Case 56
Binaryz = Binaryz & "00011101001"
Case 57
Binaryz = Binaryz & "00010010111"
Case 58
Binaryz = Binaryz & "00010011101"
Case 59
Binaryz = Binaryz & "00011100101"
Case 60
Binaryz = Binaryz & "00010000101"
Case 61
Binaryz = Binaryz & "00110111101"
Case 62
Binaryz = Binaryz & "00001110101"
Case 63
Binaryz = Binaryz & "01011001111"
Case 64
Binaryz = Binaryz & "01011110011"
Case 65
Binaryz = Binaryz & "01101001111"
Case 66
Binaryz = Binaryz & "01101111001"
Case 67
Binaryz = Binaryz & "01111010011"
Case 68
Binaryz = Binaryz & "01111011001"
Case 69
Binaryz = Binaryz & "01001101111"
Case 70
Binaryz = Binaryz & "01001111011"
Case 71
Binaryz = Binaryz & "01100101111"
Case 72
Binaryz = Binaryz & "01100111101"
Case 73
Binaryz = Binaryz & "01111001011"
Case 74
Binaryz = Binaryz & "01111001101"
Case 75
Binaryz = Binaryz & "00111101101"
Case 76
Binaryz = Binaryz & "00110101111"
Case 77
Binaryz = Binaryz & "00001000101"
Case 78
Binaryz = Binaryz & "00111101011"
Case 79
Binaryz = Binaryz & "01110000101"
Case 80
Binaryz = Binaryz & "01011000011"
Case 81
Binaryz = Binaryz & "01101000011"
Case 82
Binaryz = Binaryz & "01101100001"
Case 83
Binaryz = Binaryz & "01000011011"
Case 84
Binaryz = Binaryz & "01100001011"
Case 85
Binaryz = Binaryz & "01100001101"
Case 86
Binaryz = Binaryz & "00001011011"
Case 87
Binaryz = Binaryz & "00001101011"
Case 88
Binaryz = Binaryz & "00001101101"
Case 89
Binaryz = Binaryz & "00100100001"
Case 90
Binaryz = Binaryz & "00100001001"
Case 91
Binaryz = Binaryz & "00001001001"
Case 92
Binaryz = Binaryz & "01010000111"
Case 93
Binaryz = Binaryz & "01011100001"
Case 94
Binaryz = Binaryz & "01110100001"
Case 95
Binaryz = Binaryz & "01000010111"
Case 96
Binaryz = Binaryz & "01000011101"
Case 97
Binaryz = Binaryz & "00001010111"
Case 98
Binaryz = Binaryz & "00001011101"
Case 99
Binaryz = Binaryz & "01000100001"
Case 100
Binaryz = Binaryz & "01000010001"
Case 101
Binaryz = Binaryz & "00010100001"
Case 102
Binaryz = Binaryz & "00001010001"
End Select
Binaryz = Binaryz & "0011100010100" ' انهاء الكود باضافة الباينرى الخاص بايقاف جميع الاكواد
' انشاء صورة عرضها عدد حروف الباينرى المستخدم
Dim bmp As Bitmap = New Bitmap(Len(Binaryz), 60, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Dim z As String ' متغير لمعرفة لون الخط
Dim GraphZ As Graphics = Graphics.FromImage(bmp)
Dim RectZ As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height) ' مستطيل بحجم الصورة لاعطاء الخلفية باللون الابيض
' فرشاه لدهان المستطيل السابق باللون الابيض
Dim myBrush As Brush = New Drawing.Drawing2D.LinearGradientBrush(RectZ, Color.White, Color.White, Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal)
' دهان المستطيل السابق باللون الابيض
GraphZ.FillRectangle(myBrush, RectZ)
' رسم خطوط الباركود
Dim PenZ As Pen
Dim point1 As Point ' نقطة بداية الخط
Dim point2 As Point ' نقطة نهاية الخط
For I = 1 To Len(Binaryz)
z = Mid(Binaryz, I, 1)
If z = "0" Then
PenZ = New Pen(Color.Black, 1)
point1 = New Point(I, 0)
point2 = New Point(I, 40)
GraphZ.DrawLine(PenZ, point1, point2)
Else
PenZ = New Pen(Color.White, 1)
point1 = New Point(I, 0)
point2 = New Point(I, 40)
GraphZ.DrawLine(PenZ, point1, point2)
End If
Next
' رسم النص المراد ترميزه اسفل الكود
GraphZ.DrawString(TheText, New Font("times new roman", 12, FontStyle.Bold), New SolidBrush(Color.DarkBlue), 20, 40)
' ارجاع الصورة النهائية للدالة
Code128 = bmp
End Function
}}}}
تم الشكر بواسطة:
#4
لقد قمت بعمل الخوارزمية السابقة التى سيكون ناتجها صورة تحمل خطوط الباركود لأى نص مراد تشفيره بعد تحديد الفئة المراد استخدامها وقد شرحت كل ما عليك معرفته فيها ما عليك سوى نسخها واستخدامها مباشرة او اسناد القيمة الناتجة إلى (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
لمعلومات اخرى حول الترميز بهذا الكود يمكنك زيارة الرابط التالى :


واخيرا كى تعرف الان قيمة ما بين يديك قم بزيارة هذا الرابط وانظر إلى ثمن شراء برنامج رسم الباركود باستخدام هذا الترميز على الرابط التالى :


وهنا ايضا للاداة التى يمكن اضافتها لبرامجك والتى لم يعد احدنا بحاجة اليها والخاصة بالاكواد (EAN13) و (Code39) و (Code128)التى نجيد برمجتها حاليا :


ارجوا ان اكون قد قمت بتقديم ما يفيدكم .... دمتم جميعا بود
المثال بمرفقات المشاركة الاولى يشمل كل ماتم شرحة هنا
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 8 1,532 03-09-16, 07:59 PM
آخر رد: tryold
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 542 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  مقارنة الكلمات و الأسماء العربية برمجيا silverlight 4 474 20-12-15, 08:34 PM
آخر رد: silverlight
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 1,390 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود
  [VB.NET] كيفية انشاء قاعدة بيانات برمجيا VB.net (صوت وصورة) أحمد النجار 0 728 18-01-15, 06:59 AM
آخر رد: أحمد النجار
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 Omar Mekkawy 5 1,819 05-01-14, 03:08 AM
آخر رد: mero5000
  مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize RaggiTech 2 879 05-10-12, 07:00 PM
آخر رد: RaggiTech
  درس - طريقة عمل الباركود وكيفية إستغلاله في البرامج المحاسبية RaggiTech 0 10,337 03-10-12, 01:53 PM
آخر رد: RaggiTech
  توسيع مجال الأسماء My باستخدام My Extensibility RaggiTech 5 774 03-10-12, 12:26 PM
آخر رد: RaggiTech
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 RaggiTech 0 410 03-10-12, 08:47 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم