Sanity checks, literally just sanity checks. You could also have a key system, but that won’t be much help as it will easily be cracked within an hour or two by exploiters.
As for what sanity checks are, they are simply checks to make sure everything is actually possible and should happen.
It’s basically like a translation for a random set of letters/numbers. Ex:
function translate(key)
local ktable = string.split(key, "")
local actualkey = ""
local num1 = math.floor(#ktable/4) + 1
local let1 = ktable[num1]
actualkey ..= let1
num1 = math.floor((#ktable/4)) - 1
let1 = ktable[num1]
actualkey ..= let1
num1 = #ktable - 2
let1 = ktable[num1]
actualkey ..= let1
num1 = math.floor((#ktable + 2)/2) + 1
let1 = ktable[num1]
actualkey ..= let1
return actualkey
end