Digital fingerprinting aims at protecting multimedia contents from illegal redistribution by embedding imperceptible fingerprints identifying the users. We propose two approaches for building fingerprinting codes that accommodate millions of users and resist tens of colluders. These approaches are based on recent information-theoretic analyses of good fingerprinting codes in two regimes: 1) very low rates, and 2) rates near capacity. Good low-rate codes have high minimum distance. Good high-rate codes are short and random-like. Simulation results are presented to assess decoding performance.