Должно быть довольно просто с sha1. Что-то вроде этого и просто нарежьте его, чтобы исправить длину, выберите случайным образом верхний регистр, вставьте случайную пунктуацию:
sha1(microtime() . rand(0,100))
Я должен отметить, что видел где-то действительно умный подход к такого рода генерации паролей, который, вероятно, был лучше этого, но не могу вспомнить, где это было.