RaritySystem help

Hi guys, i’ve made this rarity system, it hasn’t any issue, but i wonder if is there a way to better implement the luck system, or just all the system to be more accurate, here’s the modules:

local module = {}
function module.chooseIndex(rarityTable, luck)
	local newRarityArray = {}

	local totalWeight = 0

	for index, rarity in pairs(rarityTable) do
		local weight = rarity[1]

		--  it decrease weight only for high rarity
		local newWeight = weight
		if weight > 100 then -- For example consider legendary of higher
			newWeight = weight / (1 + luck)^2
		end

		if newWeight < 1 then continue end

		local fraction = (1 / newWeight)
		totalWeight += fraction

		newRarityArray[index] = {fraction}
	end

	local random = Random.new()
	local rnd = random:NextNumber(0,totalWeight)

	local selectedRarity = "Common"

	local accumulatedWeight = 0

	for index, rarity in pairs(newRarityArray) do
		accumulatedWeight += rarity[1]

		if rnd <= accumulatedWeight  then
			selectedRarity = index
			break
		end
	end
	return selectedRarity
end

return module

Here’s the rarity table with the weights:

return{
	["Common"] = {2},
	["Uncommon"] = {5}, 
	["Rare"] = {10}, 
	["Epic"] = {50},
	["Legendary"] = {100},
	["Rainbow"] = {250},
	["Variant"] = {10000},
	["Mythic"] = {500},
	["Celestial"] = {1000}, 
	["Arcane"] = {5000},
	["Divine"] = {10000}, 
	["Ethereal"] = {50000}, 
	["Supernatural"] = {100000},
	["Cosmic"] = {500000},
	["Titanic"] = {1000000},
	["Primordial"] = {2000000},
	["Transcendent"] = {5000000}, 
	["GodLike"] = {10000000}
}