PHP में कैना कैप्चा - यह आसान है!


इस विषय में, मैं संक्षेप में काना-कैप्चा के बारे में बात करूंगा कि यह क्या है, यह कैसे काम करता है और पीएचपी का उपयोग करके इसे कैसे बनाया जाए।



काटाकना


जापानी में, रिकॉर्डिंग के लिए दो शब्दांश अक्षर (कटकाना, हीरागाना) और समर्थक चीनी अक्षर (कांजी) का उपयोग किया जाता है। वैसे, कांजी में चीनी अक्षरों के उच्चारण में बहुत कम समानता है। उन्हें हमारे युग की शुरुआत में जापान लाया गया था और वे अपने तरीके से विकसित हुए (मैंगनीज)। अनगिनत कांजी हैं (2-4 हजार कांजी का ज्ञान जापानी शिक्षा का उच्चतम स्तर माना जाता है)। शब्दांश वर्णमाला के मामले में, सब कुछ सरल है, हीरागाना (कुछ भी लिखने के लिए इस्तेमाल किया जा सकता है) में 47 मूल अक्षर हैं, वर्णों की एक ही संख्या कटकाना में है (मुख्य रूप से उधार शब्दों को लिखने के लिए उपयोग किया जाता है, उदाहरण के लिए モ ll ll (mo-no-ta) - पर नजर रखने के)।

सिलेबिक वर्णमाला को ठीक से नाम दिया गया है क्योंकि प्रत्येक प्रतीक एक व्यंजन है जिसमें एक व्यंजन और एक स्वर होता है (स्वर के अपवाद और व्यंजन "n" के साथ, इन संकेतों के अपने प्रतीक होते हैं)। मुख्य एक हीरागाना है (कुछ मामलों में, हिरागाना का प्रतिलेखन कांजी के ऊपर निर्धारित किया गया है, गरीब शिक्षित लोगों की सुविधा के लिए), जबकि कटकाना माध्यमिक है। यह उसकी है कि हम आज पर विचार करेंगे।

और हम इस पर विचार करेंगे क्योंकि कटकाना वर्ण लिखने में सबसे आसान है, इसलिए, हम, consider because, उन्हें दर्ज करना और पहचानना आसान होगा। वैसे, जापानी बच्चे सबसे पहले इसी कारण से कटकाना का अध्ययन करते हैं।

एक छोटा सा जोड़ - कटकाना विषय की शुरुआत में चित्र में लिखा है, "the ュ ー リ the the the the the" (ti-u-ri-n-gu-te-su-that), जिसका अर्थ है "ट्यूरिंग टेस्ट।" टुटिंग को कतकना में लिखा गया है, क्योंकि यह एक विदेशी उचित नाम है। "टेस्ट" के मामले में, यह कारण है कि यह शब्द उधार है।

डिज़ाइन


इस बीच, हमारे लिए याद रखें, mean capt, काना-कैप्चा। यह एक छवि है जिसका प्रतीक है कटकाना / हीरागाना, जिस क्षेत्र में आपको प्रतिलेखन करने की आवश्यकता है। सिर्फ इसलिए कि सिस्टम में हर किसी को हमारे द्वारा आवश्यक वर्णों को दर्ज करने के लिए समर्थन नहीं है।

एक आधार के रूप में, मैं अपनी स्क्रिप्ट ले जाऊंगा , और केवल इसे थोड़ा संशोधित करूंगा । इसके साथ शुरू करने के लिए, हम यह निर्धारित करेंगे कि हमारा काना-कैप्चा कैसा होगा। यह एक सफेद पृष्ठभूमि पर दो या तीन काले कटकाना प्रतीक होंगे + काली रेखाओं को काटते हुए।

शुरुआत के लिए, मैं अपनी स्क्रिप्ट में सभी अश्लीलताओं से छुटकारा पाना चाहता हूं। मैं vyrviglazny पृष्ठभूमि को हटाता हूं, मैं पाठ और रेखाओं को काला बनाता हूं। हमें यह मिलता है:


अब कटकाना को हमारी तस्वीर में दिखाने का समय आ गया है। सबसे पहले, चलो फ़ॉन्ट पर फैसला करते हैं, जापानी शब्दांश वर्णमाला के लिए, मैं एमएस गोथिक , कटलेट फ़ॉन्ट का सबसे अच्छा संस्करण मानता हूं। मेरे आश्चर्य के लिए, .TTC फ़ॉन्ट PHP द्वारा बिल्कुल सामान्य स्वीकार किया गया था। ईमानदारी से, मुझे इस प्रकार के ट्रू टाइप फ़ॉन्ट के साथ बहुत सारे बवासीर की उम्मीद थी।

अगला, आपको उस स्क्रिप्ट को संशोधित करना होगा जो कैप्चा कोड उत्पन्न करता है। सबसे पहले, उसे नए पात्रों को खिलाने के लिए, अर्थात्: "ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ネ ヌ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン"। ये सभी कटकाना के मुख्य पात्र हैं। पीढ़ी समारोह इस तरह दिखेगा:
function generate_code() { $chars = 'アイウエオカキクケコサシスセソタチツテトナニネヌノハヒフヘホマミムメモヤユヨラリルレロワン'; $length = rand(2, 3); $numChars = mb_strlen($chars, "UTF-8"); $str = ''; for ($i = 0; $i < $length; $i++) { $str .= mb_substr($chars, rand(1, $numChars) - 1, 1, "UTF-8"); } return $str; } 
ध्यान दो! मैं स्ट्रलेन और रूट फ़ंक्शन के मल्टीबाइट वेरिएंट का उपयोग करता हूं।

फिर, हम पीढ़ी स्क्रिप्ट में वर्णों के यादृच्छिक पदों को खींच लेंगे, हम बहुउद्देश्यीय कार्य भी प्रस्तुत करेंगे:
  $x = rand(0, 35); for($i = 0; $i < mb_strlen($code, "UTF-8"); $i++) { $x+=27; $letter=mb_substr($code, $i, 1, "UTF-8"); imagettftext ($im, $font_arr[$n]["size"], rand(3, 4), $x, rand(54, 55), "000000", img_dir.$font_arr[$n]["fname"], $letter); } 
परिणामस्वरूप, हमें यह मिलता है:


लगभग किया हुआ। मैंने कैप्चा के संचालन की जाँच सही संस्करण में कटकाना प्रतीकों के साथ दर्ज करके की। लेकिन जापानी पात्रों में प्रवेश के लिए entering 馬鹿 के पास क्या समर्थन नहीं है? यह सुनिश्चित करना आवश्यक है कि सत्यापन प्रतिलेखन के साथ होता है। ऐसा करने के लिए, आपको एक संपूर्ण फ़ंक्शन लिखना होगा:
 function kanatoroma($str){ $replace_of = array('ア','イ','ウ','エ','オ','カ','キ','ク','ケ','コ', 'サ','シ','ス','セ','ソ','タ','チ','ツ','テ','ト','ナ','ニ','ネ','ヌ', 'ノ','ハ','ヒ','フ','ヘ','ホ','マ','ミ','ム','メ','モ','ヤ','ユ','ヨ', 'ラ','リ','ル','レ','ロ','ワ','ン'); $replace_by = array('a','i','u','e','o','ka','ki','ku', 'ke','ko','sa','shi','su','se','so','ta','chi','tsu','te', 'to','na','ni','ne','nu','no','ha','hi','fu','he','ho','ma', 'mi','mu','me','mo','ya','yu','yo','ra','ri','ru','re','ro','wa','n'); $_result = str_replace($replace_of, $replace_by, $str); return $_result; } 

इस अद्भुत विशेषता के साथ, हम सत्र में रोम के रूप में सही कैप्चा समाधान को बचाते हैं।
यह सब है :) काना-कैप्चा तैयार है!
कटकाना ज्ञान के लिए खुद को परखें
चिट

वैसे, मैंने इस डोमेन को उद्देश्य के लिए लिया था, ताकि भविष्य में मैं इसके तहत सभी प्रकार की निष्ठा की मेजबानी करूं, जिसे मैं हब पर प्रकाशित करूंगा :)

और हाँ, यह कैप्चा के बारे में मेरा आखिरी विषय नहीं है, सबसे दिलचस्प आगे है :)

Source: https://habr.com/ru/post/In121029/


All Articles