Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local event = require("event")
- local term = require("term")
- local fs = require("filesystem")
- local gsm = require("gsm")
- local ini = require("ini")
- local addresses = {"АДРЕС ПК ДЛЯ ПИЧАТИ КАРТ", "АДРЕС БАНКОМАТА"}
- local DATA_RAID = "f45"
- local LISTEN_PORT = 812
- local PAYMENT_IDENT = "4"
- local BANK_IDENT = "27630"
- term.clear()
- print("Банк-сервер запущен.")
- function check_luhn(number)
- local final_amount = 0
- for i = 1, #number do
- if (i % 2) == 0 then
- final_amount = final_amount + number:sub(i, i)
- else
- if (number:sub(i, i) * 2) > 9 then
- final_amount = final_amount + (number:sub(i, i) * 2 - 9)
- else
- final_amount = final_amount + (number:sub(i, i) * 2)
- end
- end
- end
- if (final_amount % 10) == 0 then
- return true
- else
- return false
- end
- end
- function contains(array, element)
- for _, value in pairs(array) do
- if value == element then
- return true
- end
- end
- return false
- end
- function split(s, delimiter)
- result = {};
- for match in (s..delimiter):gmatch("(.-)"..delimiter) do
- table.insert(result, match);
- end
- return result;
- end
- function handler()
- local request = gsm.listen(LISTEN_PORT)
- local data = split(request[5], ":")
- if data[1] == "new_card" then
- print("Запрос на регистрацию новой карты.")
- if contains(addresses, request[3]) then
- if #data == 2 then
- local number_card = PAYMENT_IDENT .. BANK_IDENT
- while true do
- for i = 1, 9 do
- number_card = number_card .. math.random(0, 9)
- end
- for i = 0, 9 do
- if check_luhn(number_card .. i) then
- number_card = number_card .. i
- break
- end
- end
- if not fs.exists("/mnt/" .. DATA_RAID .. "/cards/" .. number_card .. ".card") then
- break
- end
- end
- local CVC = math.random(100, 999)
- local PIN = math.random(1000, 9999)
- ini.saveFile("/mnt/" .. DATA_RAID .. "/cards/" .. number_card .. ".card", {number = number_card, owner = data[2], cvc = CVC, pin = PIN, balance = 0})
- gsm.send(request[3], request[4], "success:" .. number_card .. ":" .. data[2] .. ":" .. CVC .. ":" .. PIN)
- else
- gsm.send(request[3], request[4], "invalid_structure")
- end
- end
- end
- if data[1] == "get_card" then
- print("Запрос на получение информации о карте.")
- if contains(addresses, request[3]) then
- if #data == 2 then
- if fs.exists("/mnt/" .. DATA_RAID .. "/cards/" .. data[2] .. ".card") then
- local card = ini.loadFile("/mnt/" .. DATA_RAID .. "/cards/" .. data[2] .. ".card")
- gsm.send(request[3], request[4], "success:" .. card["number"] .. ":" .. card["owner"] .. ":" .. card["cvc"] .. ":" .. card["balance"] .. ":" .. card["pin"])
- else
- gsm.send(request[3], request[4], "card_not_found")
- end
- else
- gsm.send(request[3], request[4], "invalid_structure")
- end
- end
- end
- if data[1] == "deposit" then
- print("Запрос на депозит карты [ATM].")
- if contains(addresses, request[3]) then
- if #data == 3 then
- if fs.exists("/mnt/" .. DATA_RAID .. "/cards/" .. data[2] .. ".card") then
- local card = ini.loadFile("/mnt/" .. DATA_RAID .. "/cards/" .. data[2] .. ".card")
- card["balance"] = card["balance"] + data[3]
- ini.saveFile("/mnt/" .. DATA_RAID .. "/cards/" .. data[2] .. ".card", card)
- gsm.send(request[3], request[4], "success")
- else
- gsm.send(request[3], request[4], "card_not_found")
- end
- else
- gsm.send(request[3], request[4], "invalid_structure")
- end
- end
- end
- end
- while true do
- pcall(handler)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement