<?php
// Length of a randomly generated String
$string_length = 9 ;
// Number of strings that will be generated
$tries = 3000000 ;
// Arbitrary pool of characters
// These will be used to generate the string
$character_pool = '1234567890abcdefghijklmnopqrstuvwxyz' ;
$pool_size = strlen ( $character_pool ) ;
// Maximum number of combinations
// Given the length of strings and available characters
$combination_count = pow ( $pool_size , $string_length ) ;
echo "With a character pool of $pool_size characters you can generate $combination_count unique strings of $string_length characters long.\n " ;
/**
* Secondary Consideration
*
* The probability of any one of a number of generations ($tries) matching a
* previously generated value.
*
* This only returns 100%, am I missing something?
*/
$probability = pow ( 1 - 1 / $combination_count , $tries ) ;
echo "The probabiity of generating a match with a previously generated string after $tries tries is " . round ( $probability * 100 , 2 ) . "%.\n " ;
PD9waHAKCi8vIExlbmd0aCBvZiBhIHJhbmRvbWx5IGdlbmVyYXRlZCBTdHJpbmcKJHN0cmluZ19sZW5ndGggPSA5OwkKCi8vIE51bWJlciBvZiBzdHJpbmdzIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQKJHRyaWVzID0gMzAwMDAwMDsKCi8vIEFyYml0cmFyeSBwb29sIG9mIGNoYXJhY3RlcnMKLy8gVGhlc2Ugd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmcKJGNoYXJhY3Rlcl9wb29sID0gJzEyMzQ1Njc4OTBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7CiRwb29sX3NpemUgICAgICA9IHN0cmxlbigkY2hhcmFjdGVyX3Bvb2wpOwoKLy8gTWF4aW11bSBudW1iZXIgb2YgY29tYmluYXRpb25zCi8vIEdpdmVuIHRoZSBsZW5ndGggb2Ygc3RyaW5ncyBhbmQgYXZhaWxhYmxlIGNoYXJhY3RlcnMKJGNvbWJpbmF0aW9uX2NvdW50ID0gcG93KCRwb29sX3NpemUsICRzdHJpbmdfbGVuZ3RoKTsKCmVjaG8gIldpdGggYSBjaGFyYWN0ZXIgcG9vbCBvZiAkcG9vbF9zaXplIGNoYXJhY3RlcnMgeW91IGNhbiBnZW5lcmF0ZSAkY29tYmluYXRpb25fY291bnQgdW5pcXVlIHN0cmluZ3Mgb2YgJHN0cmluZ19sZW5ndGggY2hhcmFjdGVycyBsb25nLlxuIjsKCi8qKgogKiBTZWNvbmRhcnkgQ29uc2lkZXJhdGlvbgogKiAKICogVGhlIHByb2JhYmlsaXR5IG9mIGFueSBvbmUgb2YgYSBudW1iZXIgb2YgZ2VuZXJhdGlvbnMgKCR0cmllcykgbWF0Y2hpbmcgYQogKiBwcmV2aW91c2x5IGdlbmVyYXRlZCB2YWx1ZS4KICogCiAqIFRoaXMgb25seSByZXR1cm5zIDEwMCUsIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/CiAqLwogCiRwcm9iYWJpbGl0eSA9IHBvdygxIC0gMS8kY29tYmluYXRpb25fY291bnQsICR0cmllcyk7CgplY2hvICJUaGUgcHJvYmFiaWl0eSBvZiBnZW5lcmF0aW5nIGEgbWF0Y2ggd2l0aCBhIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHN0cmluZyBhZnRlciAkdHJpZXMgdHJpZXMgaXMgIi5yb3VuZCgkcHJvYmFiaWxpdHkqMTAwLDIpLiIlLlxuIjs=