There are some surprisingly decent levels here, given that they're designed by your kids. Good job, Val and Max! 
// rating and level both zero based
function codeFor(rating, level) {
const secret = "AJHLDHBBCJ".split("").map((x) => x.charCodeAt(0));
const percentage = 100;
const levelIndex = 30 * rating + level;
const code = new Array(10).fill(" ".charCodeAt(0));
code[0] = ((levelIndex & 0x01) << 3) | secret[0] | ((percentage & 0x01) << 2);
code[1] = ((levelIndex & 0x02) << 1) | secret[1] | ((percentage & 0x02) >> 1);
code[2] = (levelIndex & 0x04) | secret[2] | ((percentage & 0x04) >> 1);
code[3] = ((levelIndex & 0x08) >> 3) | secret[3] | ((percentage & 0x08) >> 2);
code[4] = ((levelIndex & 0x10) >> 3) | secret[4] | ((percentage & 0x10) >> 1);
code[5] = ((levelIndex & 0x20) >> 5) | secret[5] | ((percentage & 0x20) >> 3);
code[6] = ((levelIndex & 0xc0) >> 4) | secret[6] | ((percentage & 0x40) >> 6);
code[7] = (levelIndex & 0xf) + secret[7];
code[8] = (levelIndex >> 4) + secret[8];
code[9] =
((code[0] + code[1] + code[2] + code[3] + code[4] + code[5] + code[6] + code[7] + code[8]) & 0xf) + secret[9];
for (let i = 7 - (levelIndex & 0x07); i > -1; i--) {
const tmp = code[6];
code[6] = code[5];
code[5] = code[4];
code[4] = code[3];
code[3] = code[2];
code[2] = code[1];
code[1] = code[0];
code[0] = tmp;
}
return code.map((x) => String.fromCharCode(x)).join("");
}