Unique key having length of 8
It looks from the data as if you do not need the numbers to be random, only unique. 
A solution is to take the numbers from 1 to 1,000,000 but output them in base 29 using the allowed characters.

private static readonly char[] Values = {
        'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z', '2',
        '3', '4', '5', '6', '7', '8', '9'
    };

private static readonly int ValueCount = Values.Length;

private IEnumerable&lt;string&gt; GenerateValues(int count) {
    for (var c = 0; c &lt; count; c++) {
        yield return FormatNumber(c);
    }
}

private static string FormatNumber(int value) {

    var digits = new[] { Values[0], Values[0], Values[0], Values[0], Values[0], Values[0], Values[0], Values[0] };
    var slotCount = digits.Length;

    var current = value;
    var count = 0;
    while (current &gt; 0) {
        int rem;
        current = Math.DivRem(current, ValueCount, out rem);
        digits[slotCount - ++count] = Values[rem];
    }

    return new string(digits);
}


This will generate:

BBBBBBBB  (0)
BBBBBBBC  (1)
BBBBBBBD  (2)
...
BBBCQBC3  (1,000,000)


you can modify it to start at any point and to generate different amount of Ids (up to \$29^8-1\$)