Что не так в этом генераторе рандомных чисел?
Если числа жёстко должны быть в диапазоне от 1 до 20 - можно попробовать сделать массив с числами от 1 до 20, а потом отсортировать их в случайном порядке.
У Кантора есть пример реализации.
function randomInt(min,max)
{
    return Math.floor(Math.random()*(max-min+1)+min);
}
randomInt(1,100000); //случайное число от 1 до 1,100000