Pour la fonction t'as raison, c'est plus optimisé comme tu as fait. En fait à la base je pensais à autre chose (uniquement les majuscules, minuscules, et nombres) donc j'étais parti sur une boucle conditionnelle...
Par contre, c'est normal si dans la génération de caractère on obtient pas de nombres. Certains se confondent avec les lettres. À moins de les sortir du random, autant pas les utiliser. :)