fork download
  1. <?php
  2.  
  3. class TextToAscii
  4. {
  5. private static $charsMap = array(
  6. ' ' => array(
  7. ' ',
  8. ' ',
  9. ' ',
  10. ' ',
  11. ' ',
  12. ),
  13. '0' => array(
  14. '###',
  15. '# #',
  16. '# #',
  17. '# #',
  18. '###',
  19. ),
  20. '1' => array(
  21. '## ',
  22. ' # ',
  23. ' # ',
  24. ' # ',
  25. '###',
  26. ),
  27. '2' => array(
  28. '###',
  29. ' #',
  30. '###',
  31. '# ',
  32. '###',
  33. ),
  34. '3' => array(
  35. '###',
  36. ' #',
  37. '###',
  38. ' #',
  39. '###',
  40. ),
  41. '4' => array(
  42. '# #',
  43. '# #',
  44. '###',
  45. ' #',
  46. ' #',
  47. ),
  48. '5' => array(
  49. '###',
  50. '# ',
  51. '###',
  52. ' #',
  53. '###',
  54. ),
  55. '6' => array(
  56. '###',
  57. '# ',
  58. '###',
  59. '# #',
  60. '###',
  61. ),
  62. '7' => array(
  63. '###',
  64. ' #',
  65. ' #',
  66. ' #',
  67. ' #',
  68. ),
  69. '8' => array(
  70. '###',
  71. '# #',
  72. '###',
  73. '# #',
  74. '###',
  75. ),
  76. '9' => array(
  77. '###',
  78. '# #',
  79. '###',
  80. ' #',
  81. '###',
  82. ),
  83. '+' => array(
  84. ' ',
  85. ' # ',
  86. '###',
  87. ' # ',
  88. ' ',
  89. ),
  90. '-' => array(
  91. ' ',
  92. ' ',
  93. '###',
  94. ' ',
  95. ' ',
  96. ),
  97. '=' => array(
  98. ' ',
  99. '###',
  100. ' ',
  101. '###',
  102. ' ',
  103. ),
  104. '?' => array(
  105. '###',
  106. ' #',
  107. ' # ',
  108. ' ',
  109. ' # ',
  110. ),
  111. );
  112.  
  113. private static $textChars = array('@', '#', '$', '&');
  114.  
  115. public static function render($text)
  116. {
  117. $image = array(
  118. '',
  119. '',
  120. '',
  121. '',
  122. '',
  123. '',
  124. );
  125.  
  126. foreach (str_split($text) as $char) {
  127. if (!isset(self::$charsMap[$char])) {
  128. trigger_error('This character is not supported: '. $char, E_USER_WARNING);
  129. return '/* CAPTCHA ERROR */';
  130. }
  131.  
  132. $textChar =& self::$textChars[ array_rand(self::$textChars) ];
  133.  
  134. $shift = mt_rand(0, 1);
  135. $emptyImageLine = str_repeat(' ', strlen(self::$charsMap[$char][0]));
  136.  
  137. foreach ($image as $imageLineNumber => &$imageLine) {
  138. $lineNumber = $imageLineNumber-$shift;
  139.  
  140. if (isset(self::$charsMap[$char][$lineNumber])) {
  141. $imageLine .= str_replace(
  142. '#',
  143. $textChar,
  144. self::$charsMap[$char][$lineNumber]
  145. );
  146. } else {
  147. $imageLine .= $emptyImageLine;
  148. }
  149. }
  150. }
  151.  
  152. $image = implode("\n", $image);
  153.  
  154. return $image;
  155. }
  156. }
  157.  
  158. echo TextToAscii::render('3 + 7 - 4');
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
                   
###     ###     $ $
  #  @    #     $ $
### @@@   # &&& $$$
  #  @    #       $
###       #       $