я бы частично использовал функции из оскат библиотеки, чтоб сформировать строку, в коде бы оставил только проверки