<?php
$str = "23456789ABCDEGHJKMNPQRSTUVXYZabcdeghjkmnpqrstuvxyz";
$excludes = ['cp','cb','ck','c6','c9','rn','rm','mm','co','do','cl','db','qp','qb','dp','ww'];
function fastCaptcha
(array $dictionary, array $excludedSyllables, int
$length): string
{
$captcha = '';
$generatedLength = 0;
while ($generatedLength < $length) {
$randomCharacter = $dictionary[array_rand($dictionary)]; $captcha .= $randomCharacter;
$generatedLength++;
}
return $captcha;
}
$excludesRegex = '/' . implode('|', $excludes) . '/';
$shortCaptchas = [];
$mediumCaptchas = [];
$longCaptchas = [];
for ($i = 0; $i < 1000; $i++) {
$shortCaptchas[] = fastCaptcha($dictionaryArray, $indexedExcludes, 2);
$mediumCaptchas[] = fastCaptcha($dictionaryArray, $indexedExcludes, 5);
$longCaptchas[] = fastCaptcha($dictionaryArray, $indexedExcludes, 10);
}
foreach($shortCaptchas as $captcha) {
}
foreach($mediumCaptchas as $captcha) {
}
foreach($longCaptchas as $captcha) {
}
echo "short : " . ($t1 - $t0) . "\n";
echo "medium: " . ($t2 - $t1) . "\n";
echo "long : " . ($t3 - $t2) . "\n";
ICAgIDw/cGhwCiAgICAgCiAgICAkc3RyID0gIjIzNDU2Nzg5QUJDREVHSEpLTU5QUVJTVFVWWFlaYWJjZGVnaGprbW5wcXJzdHV2eHl6IjsKICAgICRleGNsdWRlcyA9IFsnY3AnLCdjYicsJ2NrJywnYzYnLCdjOScsJ3JuJywncm0nLCdtbScsJ2NvJywnZG8nLCdjbCcsJ2RiJywncXAnLCdxYicsJ2RwJywnd3cnXTsKICAgICAKICAgICRpbmRleGVkRXhjbHVkZXMgPSBhcnJheV9jb21iaW5lKCRleGNsdWRlcywgJGV4Y2x1ZGVzKTsKICAgICRkaWN0aW9uYXJ5QXJyYXkgPSBzdHJfc3BsaXQoJHN0cik7CiAgICAgCiAgICBmdW5jdGlvbiBmYXN0Q2FwdGNoYShhcnJheSAkZGljdGlvbmFyeSwgYXJyYXkgJGV4Y2x1ZGVkU3lsbGFibGVzLCBpbnQgJGxlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRjYXB0Y2hhID0gJyc7CiAgICAgICAgJGdlbmVyYXRlZExlbmd0aCA9IDA7CiAgICAgCiAgICAgICAgd2hpbGUgKCRnZW5lcmF0ZWRMZW5ndGggPCAkbGVuZ3RoKSB7CiAgICAgICAgICAgICRyYW5kb21DaGFyYWN0ZXIgPSAkZGljdGlvbmFyeVthcnJheV9yYW5kKCRkaWN0aW9uYXJ5KV07CiAgICAgICAgICAgICRjYXB0Y2hhIC49ICRyYW5kb21DaGFyYWN0ZXI7CiAgICAgICAgICAgICRnZW5lcmF0ZWRMZW5ndGgrKzsKICAgICAgICB9CiAgICAgCiAgICAgICAgcmV0dXJuICRjYXB0Y2hhOwogICAgfQogICAgIAogICAgJGV4Y2x1ZGVzUmVnZXggPSAnLycgLiBpbXBsb2RlKCd8JywgJGV4Y2x1ZGVzKSAuICcvJzsKICAgICAKICAgICRzaG9ydENhcHRjaGFzICA9IFtdOwogICAgJG1lZGl1bUNhcHRjaGFzID0gW107CiAgICAkbG9uZ0NhcHRjaGFzICAgPSBbXTsKICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspIHsKICAgICAgICAkc2hvcnRDYXB0Y2hhc1tdICA9IGZhc3RDYXB0Y2hhKCRkaWN0aW9uYXJ5QXJyYXksICRpbmRleGVkRXhjbHVkZXMsIDIpOwogICAgICAgICRtZWRpdW1DYXB0Y2hhc1tdID0gZmFzdENhcHRjaGEoJGRpY3Rpb25hcnlBcnJheSwgJGluZGV4ZWRFeGNsdWRlcywgNSk7CiAgICAgICAgJGxvbmdDYXB0Y2hhc1tdICAgPSBmYXN0Q2FwdGNoYSgkZGljdGlvbmFyeUFycmF5LCAkaW5kZXhlZEV4Y2x1ZGVzLCAxMCk7CiAgICB9CiAgICAKICAgICR0MCA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAKICAgIGZvcmVhY2goJHNob3J0Q2FwdGNoYXMgYXMgJGNhcHRjaGEpIHsKICAgIAlwcmVnX21hdGNoKCRleGNsdWRlc1JlZ2V4LCAkY2FwdGNoYSk7CiAgICB9CiAgICAgCiAgICAkdDEgPSBtaWNyb3RpbWUodHJ1ZSk7CiAgICAgCiAgICBmb3JlYWNoKCRtZWRpdW1DYXB0Y2hhcyBhcyAkY2FwdGNoYSkgewogICAgCXByZWdfbWF0Y2goJGV4Y2x1ZGVzUmVnZXgsICRjYXB0Y2hhKTsKICAgIH0KICAgICAKICAgICR0MiA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAKICAgIGZvcmVhY2goJGxvbmdDYXB0Y2hhcyBhcyAkY2FwdGNoYSkgewogICAgCXByZWdfbWF0Y2goJGV4Y2x1ZGVzUmVnZXgsICRjYXB0Y2hhKTsKICAgIH0KICAgICAKICAgICR0MyA9IG1pY3JvdGltZSh0cnVlKTsKICAgICAKICAgIGVjaG8gInNob3J0IDogIiAuICgkdDEgLSAkdDApIC4gIlxuIjsKICAgIGVjaG8gIm1lZGl1bTogIiAuICgkdDIgLSAkdDEpIC4gIlxuIjsKICAgIGVjaG8gImxvbmcgIDogIiAuICgkdDMgLSAkdDIpIC4gIlxuIjs=