Второй for делает проход по символам строки и, на сколько я понимаю, считает количество символов от 0 до 9. Ord нужен для того, что перевести символ в числовое значение по таблице ascii, а 48 отнимают, потому что цифры в этой таблице начинаются как раз от 48.
P.S. Редкий быдлокод, извините.