1. Ты можешь предсказать смс-код, видя этот код (это основная проблема). Потому, что можешь легко подобрать seed (это дата, на момент генерации кода, переведенная в секунды), который используется для инициализации рандома и которая нам известна. В качестве seed нужно брать число, которое нельзя предсказать, просто глядя в код.
2. Коды от 1000 до 9999 слишком простые (сами по себе) и имеют малый интервал. Желательно увеличить еще на 1-2 символа, Иначе есть потенциальная вероятность успешного брута. Еще лучше, брать не только числа, но и буквы, хотябы в нижнем регистре.