I think I figured it out. I can generate a sequence with an algorithm to get
1, 8, 4, 5, 2, 7, 3, 6
Which turns out to be
18 AH 1 2 3 4
45 DE 4 3 2 1
27 BG 2 1 4 3
36 CF 3 4 1 2
If I take the diagnal as the matchup, or reverse the bottom rows, then I get the correct matchups. Just need to make this dynamic and make sure it works for other values.