Если дело только в вводе промокода, то глупо изобретать велосипед, его можно ввести обычным способом.
А для решения вашей проблемы вам нужно где-то хранить введенные пользователем значения. Т.е. тут без базы данных не обойтись. Нажал кнопку - прочитал что сейчас в БД хранится, прибавил последнее нажатое, проверил, если не подходит, помещаешь обратно в БД (но уже с приписанным значением). И так повторять пока комбинация не подберется или пока количество нажатий не будет выше какого-то допустимого значение.
Можно даже при нажатии редактировать сообщение и показывать введенные знаки/символы.