\catcode`\@=11

\def\numstring#1{\expandafter\@numstring\csname c@#1\endcsname}

\def\Numstring#1{\expandafter\@Numstring\csname c@#1\endcsname}

\def\ordstring#1{\expandafter\@ordstring\csname c@#1\endcsname}

\def\Ordstring#1{\expandafter\@Ordstring\csname c@#1\endcsname}

\def\@numstring#1{\ns@numstr{#1}\ns@neunzehns{null}{}}

\def\@Numstring#1{\expandafter\@@Numstring\expandafter{\number#1}}

\def\@@Numstring#1%
  {\edef\@tempa{\@numstring{#1}}%
   \expandafter\MakeUppercase\@tempa}

\def\@ordstring#1{\ns@numstr{#1}\ns@neunzehnord{null\-te}{te}}

\def\@Ordstring#1{\expandafter\@@Ordstring\expandafter{\number#1}}

\def\@@Ordstring#1%
  {\edef\@tempa{\@ordstring{#1}}%
   \expandafter\MakeUppercase\@tempa}

\let\numstr\@numstring%
\let\Numstr\@Numstring%
\let\ordstr\@ordstring%
\let\Ordstr\@Ordstring%

\def\ns@numoutofrange#1#2{\number#1#2}

\def\ns@numstr#1#2#3#4%
  {\ifnum\number#1<\@ne%
     #3%
   \else\ifnum\number#1<1000000000 %
     \expandafter\ns@numstring\expandafter{\number#1}#2%
   \else%
     \ns@numoutofrange{#1}{#4}%
   \fi\fi}

\def\ns@numstring#1#2{%
  \expandafter\ns@@numstring%
  \ifcase%
  \ifnum#1<10 1%
  \else\ifnum#1<100 2%
  \else\ifnum#1<\@m 3%
  \else\ifnum#1<\@M 4%
  \else\ifnum#1<100000 5%
  \else\ifnum#1<1000000 6%
  \else\ifnum#1<10000000 7%
  \else\ifnum#1<100000000 8%
  \else9%
  \fi\fi\fi\fi\fi\fi\fi\fi %
  \or00000000#1% case 1: Add 8 leading zeros
  \or0000000#1%  case 2: Add 7 leading zeros
  \or000000#1%   case 3: Add 6 leading zeros
  \or00000#1%    case 4: Add 5 leading zeros
  \or0000#1%     case 5: Add 4 leading zeros
  \or000#1%      case 6: Add 3 leading zeros
  \or00#1%       case 7: Add 2 leading zeros
  \or0#1%        case 8: Add 1 leading zero
  \or#1%         case 9: Add no leading zeros
  \or%
  \@nil#2%
  \fi}

\def\ns@@numstring#1#2#3#4#5#6#7\or#8\@nil#9%
  {\ifnum#1#2#3>\z@
   \ns@million#1#2#3%
   \ifnum#4#5#6>\z@\space\fi%
   \fi%
   \ifnum#4#5#6>\z@%
   \ns@hundred#4#5#6{#1#2#3}{#4#5}\ns@neunzehn%
   \ifnum#4#5#6>\@ne\-\fi%
   tau\-send%
   \ifnum#7>\z@\-\fi%
   \fi%
   \ns@hundred#7{#4#5#6}1#9}

\def\ns@million#1#2#3%
  {\ifnum#1#2#3=\@ne%
   \ns@hundred#1#2#301\ns@neunzehne%
   \space%
   Mil\-lion%
   \else%
   \ns@hundred#1#2#301\ns@neunzehns%
   \space%
   Mil\-lio\-nen%
   \fi}

\def\ns@hundred#1#2#3#4#5#6%
  {\ifnum#1>\z@%
   \ifnum#4#1>\@ne\ns@neunzehn#1\-\fi%
   hun\-dert%
   \ifnum#2#3>\z@\-\fi%
   \fi%
   \ifnum#2#3<20 %
   \ifnum#5#2#3>\@ne#6{#2#3}\fi%
   \else%
   \ifnum#3>\z@\ns@neunzehn#3\-und\-\fi%
   \ns@neunzig#2%
   #60%
   \fi}

\def\ns@neunzehn#1%
  {\ifcase#1\empty\or ein\or zwei\or drei\or vier\or f\"unf\or sechs\or%
   sie\-ben\or acht\or neun\or zehn\or elf\or zw\"olf\or drei\-zehn\or%
   vier\-zehn\or f\"unf\-zehn\or sech\-zehn\or sieb\-zehn\or%
   acht\-zehn\or neun\-zehn\fi}

\def\ns@neunzehns#1{\ifcase#1\empty\or eins\else\ns@neunzehn{#1}\fi}

\def\ns@neunzehne#1{\ifcase#1\empty\or ei\-ne\else\ns@neunzehn{#1}\fi}

\def\ns@neunzehnord#1%
  {\ifcase#1\-ste%
   \or er\-ste%
   \or zwei\-te%
   \or drit\-te%
   \or vier\-te%
   \or f\"unf\-te%
   \or sech\-ste%
   \or sieb\-te%
   \or ach\-te%
   \or neun\-te%
   \or zehn\-te%
   \or elf\-te%
   \or zw\"olf\-te%
   \or drei\-zehn\-te%
   \or vier\-zehn\-te%
   \or f\"unf\-zehn\-te%
   \or sech\-zehn\-te%
   \or sieb\-zehn\-te%
   \or acht\-zehn\-te%
   \or neun\-zehn\-te%
   \fi}

\def\ns@neunzig#1%
  {\ifcase#1
   \or
   \or zwan\-zig%
   \or drei\ss ig%
   \or vier\-zig%
   \or f\"unf\-zig%
   \or sech\-zig%
   \or sieb\-zig%
   \or acht\-zig%
   \or neun\-zig%
   \fi}

\catcode`\@=12

\endinput
