<?php
class TextToAscii
{
private static
$charsMap = array( ' ',
' ',
' ',
' ',
' ',
),
'###',
'# #',
'# #',
'# #',
'###',
),
'## ',
' # ',
' # ',
' # ',
'###',
),
'###',
' #',
'###',
'# ',
'###',
),
'###',
' #',
'###',
' #',
'###',
),
'# #',
'# #',
'###',
' #',
' #',
),
'###',
'# ',
'###',
' #',
'###',
),
'###',
'# ',
'###',
'# #',
'###',
),
'###',
' #',
' #',
' #',
' #',
),
'###',
'# #',
'###',
'# #',
'###',
),
'###',
'# #',
'###',
' #',
'###',
),
' ',
' # ',
'###',
' # ',
' ',
),
' ',
' ',
'###',
' ',
' ',
),
' ',
'###',
' ',
'###',
' ',
),
'###',
' #',
' # ',
' ',
' # ',
),
);
private static
$textChars = array('@', '#', '$', '&');
public static function render($text)
{
'',
'',
'',
'',
'',
'',
);
if (!isset(self::$charsMap[$char])) { trigger_error('This character is not supported: '. $char, E_USER_WARNING); return '/* CAPTCHA ERROR */';
}
$textChar =& self::$textChars[ array_rand(self::$textChars) ];
foreach ($image as $imageLineNumber => &$imageLine) {
$lineNumber = $imageLineNumber-$shift;
if (isset(self::$charsMap[$char][$lineNumber])) { '#',
$textChar,
self::$charsMap[$char][$lineNumber]
);
} else {
$imageLine .= $emptyImageLine;
}
}
}
return $image;
}
}
echo TextToAscii::render('3 + 7 - 4');
PD9waHAKCmNsYXNzIFRleHRUb0FzY2lpCnsKICAgIHByaXZhdGUgc3RhdGljICRjaGFyc01hcCA9IGFycmF5KAogICAgICAgICcgJyA9PiBhcnJheSgKICAgICAgICAgICAgJyAnLAogICAgICAgICAgICAnICcsCiAgICAgICAgICAgICcgJywKICAgICAgICAgICAgJyAnLAogICAgICAgICAgICAnICcsCiAgICAgICAgKSwKICAgICAgICAnMCcgPT4gYXJyYXkoCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnIyAjJywKICAgICAgICAgICAgJyMgIycsCiAgICAgICAgICAgICcjICMnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICApLAogICAgICAgICcxJyA9PiBhcnJheSgKICAgICAgICAgICAgJyMjICcsCiAgICAgICAgICAgICcgIyAnLAogICAgICAgICAgICAnICMgJywKICAgICAgICAgICAgJyAjICcsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICksCiAgICAgICAgJzInID0+IGFycmF5KAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyAgIycsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnIyAgJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgKSwKICAgICAgICAnMycgPT4gYXJyYXkoCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnICAjJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICApLAogICAgICAgICc0JyA9PiBhcnJheSgKICAgICAgICAgICAgJyMgIycsCiAgICAgICAgICAgICcjICMnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyAgIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICksCiAgICAgICAgJzUnID0+IGFycmF5KAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyMgICcsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnICAjJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgKSwKICAgICAgICAnNicgPT4gYXJyYXkoCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnIyAgJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgICAgICcjICMnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICApLAogICAgICAgICc3JyA9PiBhcnJheSgKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICAgICAnICAjJywKICAgICAgICAgICAgJyAgIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICksCiAgICAgICAgJzgnID0+IGFycmF5KAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyMgIycsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnIyAjJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgKSwKICAgICAgICAnOScgPT4gYXJyYXkoCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnIyAjJywKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICApLAogICAgICAgICcrJyA9PiBhcnJheSgKICAgICAgICAgICAgJyAgICcsCiAgICAgICAgICAgICcgIyAnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyAjICcsCiAgICAgICAgICAgICcgICAnLAogICAgICAgICksCiAgICAgICAgJy0nID0+IGFycmF5KAogICAgICAgICAgICAnICAgJywKICAgICAgICAgICAgJyAgICcsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnICAgJywKICAgICAgICAgICAgJyAgICcsCiAgICAgICAgKSwKICAgICAgICAnPScgPT4gYXJyYXkoCiAgICAgICAgICAgICcgICAnLAogICAgICAgICAgICAnIyMjJywKICAgICAgICAgICAgJyAgICcsCiAgICAgICAgICAgICcjIyMnLAogICAgICAgICAgICAnICAgJywKICAgICAgICApLAogICAgICAgICc/JyA9PiBhcnJheSgKICAgICAgICAgICAgJyMjIycsCiAgICAgICAgICAgICcgICMnLAogICAgICAgICAgICAnICMgJywKICAgICAgICAgICAgJyAgICcsCiAgICAgICAgICAgICcgIyAnLAogICAgICAgICksCiAgICApOwogICAgCiAgICBwcml2YXRlIHN0YXRpYyAkdGV4dENoYXJzID0gYXJyYXkoJ0AnLCAnIycsICckJywgJyYnKTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbmRlcigkdGV4dCkKICAgIHsKICAgICAgICAkaW1hZ2UgPSBhcnJheSgKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnJywKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAnJywKICAgICAgICApOwogICAgICAgIAogICAgICAgIGZvcmVhY2ggKHN0cl9zcGxpdCgkdGV4dCkgYXMgJGNoYXIpIHsKICAgICAgICAgICAgaWYgKCFpc3NldChzZWxmOjokY2hhcnNNYXBbJGNoYXJdKSkgewogICAgICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignVGhpcyBjaGFyYWN0ZXIgaXMgbm90IHN1cHBvcnRlZDogJy4gJGNoYXIsIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgICAgIHJldHVybiAnLyogQ0FQVENIQSBFUlJPUiAqLyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR0ZXh0Q2hhciA9JiBzZWxmOjokdGV4dENoYXJzWyBhcnJheV9yYW5kKHNlbGY6OiR0ZXh0Q2hhcnMpIF07CiAgICAgICAgICAgIAogICAgICAgICAgICAkc2hpZnQgPSBtdF9yYW5kKDAsIDEpOwogICAgICAgICAgICAkZW1wdHlJbWFnZUxpbmUgPSBzdHJfcmVwZWF0KCcgJywgc3RybGVuKHNlbGY6OiRjaGFyc01hcFskY2hhcl1bMF0pKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCRpbWFnZSBhcyAkaW1hZ2VMaW5lTnVtYmVyID0+ICYkaW1hZ2VMaW5lKSB7CiAgICAgICAgICAgICAgICAkbGluZU51bWJlciA9ICRpbWFnZUxpbmVOdW1iZXItJHNoaWZ0OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoc2VsZjo6JGNoYXJzTWFwWyRjaGFyXVskbGluZU51bWJlcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGltYWdlTGluZSAuPSBzdHJfcmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgJyMnLAogICAgICAgICAgICAgICAgICAgICAgICAkdGV4dENoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OiRjaGFyc01hcFskY2hhcl1bJGxpbmVOdW1iZXJdCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGltYWdlTGluZSAuPSAkZW1wdHlJbWFnZUxpbmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGltYWdlID0gaW1wbG9kZSgiXG4iLCAkaW1hZ2UpOwogICAgICAgIAogICAgICAgIHJldHVybiAkaW1hZ2U7CiAgICB9Cn0KCmVjaG8gVGV4dFRvQXNjaWk6OnJlbmRlcignMyArIDcgLSA0Jyk7