Changing category codes is the worst method, in my opinion.
Here's a simple implementation with xparse:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\overrideDigits}{m}
{
\tl_map_inline:nn { #1 }
{
\nobody_digit:n { ##1 }
}
}
\cs_new:Npn \nobody_digit:n #1
{
\str_case:nn { #1 }
{
{0}{Zero}
{1}{One}
{2}{Two}
{3}{Three}
{4}{Four}
{5}{Five}
{6}{Six}
{7}{Seven}
{8}{Eight}
{9}{Nine}
}
}
\ExplSyntaxOff
\begin{document}
\overrideDigits{12345}
\overrideDigits{67890}
\end{document}
The input is mapped character by character and each digit is substituted with whatever you choose (recall that spaces need to be input as ~ in the body of the definition for \nobody_digit:n.

A “classical” implementation:
\documentclass{article}
\makeatletter
\newcommand{\overrideDigits}[1]{%
\@tfor\next:=#1\do{\csname digit\next subs\endcsname}%
}
\@namedef{digit0subs}{Zero}
\@namedef{digit1subs}{One}
\@namedef{digit2subs}{Two}
\@namedef{digit3subs}{Three}
\@namedef{digit4subs}{Four}
\@namedef{digit5subs}{Five}
\@namedef{digit6subs}{Six}
\@namedef{digit7subs}{Seven}
\@namedef{digit8subs}{Eight}
\@namedef{digit9subs}{Nine}
\makeatother
\begin{document}
\overrideDigits{12345}
\overrideDigits{67890}
\end{document}
Another expl3 implementation with different renderings for the digits. You define named lists and each digit chooses the corresponding item.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\overrideDigits}{O{default}m}
{
\tl_map_inline:nn { #2 }
{
\clist_item:cn { l_nobody_digits_#1_clist } { ##1 + 1 }
}
}
\NewDocumentCommand{\definedigits}{mm}
{
\clist_clear_new:c { l_nobody_digits_#1_clist }
\clist_set:cn { l_nobody_digits_#1_clist } { #2 }
}
\ExplSyntaxOff
\definedigits{default}{0,1,2,3,4,5,6,7,8,9}
\definedigits{names}{
Zero,
One,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine
}
\definedigits{greek}{
\ensuremath{\alpha},
\ensuremath{\beta},
\ensuremath{\gamma},
\ensuremath{\delta},
\ensuremath{\varepsilon},
\ensuremath{\zeta},
\ensuremath{\eta},
\ensuremath{\vartheta},
\ensuremath{\iota},
\ensuremath{\kappa}
}
\begin{document}
\overrideDigits{1234567890}
\overrideDigits[names]{0123456789}
\overrideDigits[greek]{0123456789}
\end{document}

Why did your attempt fail? Mainly because when you try doing \def0, 0 is not active, because it has been absorbed in the replacement text for \overrideDigits when it's not active.
A possible solution could be
\def\overrideDigits#1{%
\begingroup
\catcode`0=\active
\begingroup\lccode`~=`0 \lowercase{\endgroup\let~}{\zero}%
% and so on for the other digits
\scantokens\expandafter{#1\empty}%
\endgroup
}
Another possibility is
\begingroup
\catcode`0=\active \catcode`1=\active
\catcode`2=\active \catcode`3=\active
\catcode`4=\active \catcode`5=\active
\catcode`6=\active \catcode`7=\active
\catcode`8=\active \catcode`9=\active
\gdef\overrideDigits#1{%
\catcode`0=\active \catcode`1=\active
\catcode`2=\active \catcode`3=\active
\catcode`4=\active \catcode`5=\active
\catcode`6=\active \catcode`7=\active
\catcode`8=\active \catcode`9=\active
\let0\zero \let1\one \let2\two \let3\three \let4\four
\let5\five \let6\six \let7\seven \let8\eight \let9\nine
\scantokens{#1\empty}%
}
\endgroup
xstring? – Jun 05 '15 at 18:06