  We propose a two-layer coding architecture for communication of multiple
users over a shared slotted medium enabling joint collision resolution and
decoding. Each user first encodes its information bits with an outer code for
reliability, and then transmits these coded bits with possible repetitions over
transmission time slots of the access channel. The transmission patterns are
dictated by the inner collision-resolution code and collisions with other
users' transmissions may occur. We analyze two types of codes for the outer
layer: long-blocklength LDPC codes, and short-blocklength algebraic codes. With
LDPC codes, a density evolution analysis enables joint optimization of both
outer and inner code parameters for maximum throughput. With algebraic codes,
we invoke a similar analysis by approximating their average erasure correcting
capability while assuming a large number of active transmitters. The proposed
low-complexity schemes operate at a significantly smaller gap to capacity than
the state of the art. Our schemes apply both to a multiple access scenario
where number of users within a frame is known a priori, and to a random access
scenario where that number is known only to the decoder. In the latter case, we
optimize an outage probability due to the variability in user activity.
