Числовой литерал, который начинается с нуля, интерпретируется как восьмеричное, поэтому запись 01004 равна точно так же, как запись 516.
Некоторые другие ответы, предлагающие использовать parseInt внутри функции для преобразования восьмеричного значения в десятичное.
Это не поможет, поскольку числовое значение 516 передается функции. Если вы попросите parseInt предоставить вам базовую 10-ю интерпретацию, вы получите 516!
Способ исправить это - либо потерять начальный ноль, либо, если требуется ноль, сделать его строковым литералом, а не числом, и использовать parseInt (num, 10) внутри функции.