Como consumir API de CPF em Lua para sistemas de jogos e IoT

Aprenda a consumir uma API de consulta de CPF em Lua usando lua-requests e LuaSocket. Exemplos para games, IoT e sistemas embarcados.

Redação CPFHub.io
Redação CPFHub.io
··8 min de leitura
Como consumir API de CPF em Lua para sistemas de jogos e IoT

Consumir a API de CPF em Lua é viável tanto em servidores de jogos online quanto em dispositivos IoT como NodeMCU e ESP32. Use a biblioteca lua-requests para ambientes com LuaRocks disponível, LuaSocket com LuaSec para HTTPS em ambientes restritos, ou io.popen com cURL em dispositivos embarcados. A ANPD orienta que dados pessoais como CPF sejam tratados com o princípio da necessidade — colete e armazene apenas o que for imprescindível para a operação.

Introdução

O Lua é uma linguagem de programação leve, rápida e embarcável, amplamente utilizada em três domínios principais: jogos (como motor de script em engines como Roblox, Love2D e Corona SDK), IoT (em dispositivos embarcados com NodeMCU e ESP8266) e sistemas de rede (como scripts em Nginx via OpenResty). No Brasil, a demanda por validação de CPF em plataformas de jogos online e apostas vem crescendo significativamente, especialmente com a regulamentação do setor de betting.


1. Pré-requisitos

Dependendo do seu ambiente, você precisará de:

  • Lua 5.3 ou superior -- Ou LuaJIT para melhor performance.

  • LuaRocks -- Gerenciador de pacotes para instalar bibliotecas.

  • Conta na CPFHub.io -- Cadastre-se em CPFHub.io e gere sua chave de API no painel.

Instalando bibliotecas necessárias

luarocks install lua-requests
luarocks install luasocket
luarocks install lua-cjson

2. Consumindo a API com lua-requests

A biblioteca lua-requests oferece uma interface inspirada na popular biblioteca requests do Python:

local requests = require('requests')
local cjson = require('cjson')

local cpf = '12345678900'
local api_key = 'SUA_CHAVE_DE_API'
local url = 'https://api.cpfhub.io/cpf/' .. cpf

local response = requests.get(url, {
    headers = {
    ['x-api-key'] = api_key,
    ['Accept'] = 'application/json',
    },
    timeout = 30,
})

if response.status_code == 200 then
    local data = cjson.decode(response.text)

    if data.success then
    print('Nome: ' .. data.data.name)
    print('Nome (maiusculas): ' .. data.data.nameUpper)
    print('Genero: ' .. data.data.gender)
    print('Nascimento: ' .. data.data.birthDate)
    print('Dia: ' .. data.data.day .. ', Mes: ' .. data.data.month .. ', Ano: ' .. data.data.year)
    else
    print('Consulta nao retornou dados.')
    end
else
    print('Erro HTTP: ' .. response.status_code)
end

3. Consumindo a API com LuaSocket e LuaSec

Para ambientes onde lua-requests não está disponível, use LuaSocket com LuaSec para suporte HTTPS:

local https = require('ssl.https')
local ltn12 = require('ltn12')
local cjson = require('cjson')

local cpf = '12345678900'
local api_key = 'SUA_CHAVE_DE_API'
local url = 'https://api.cpfhub.io/cpf/' .. cpf

local response_body = {}

local result, status_code, headers = https.request({
    url = url,
    method = 'GET',
    headers = {
    ['x-api-key'] = api_key,
    ['Accept'] = 'application/json',
    ['Content-Length'] = '0',
    },
    sink = ltn12.sink.table(response_body),
    timeout = 30,
})

if status_code == 200 then
    local body = table.concat(response_body)
    local data = cjson.decode(body)

    if data.success then
    local info = data.data
    print('Nome: ' .. info.name)
    print('CPF: ' .. info.cpf)
    print('Genero: ' .. info.gender)
    print('Nascimento: ' .. info.birthDate)
    else
    print('Consulta sem sucesso.')
    end
else
    print('Erro HTTP: ' .. tostring(status_code))
end

4. Abordagem via cURL para ambientes restritos

Em dispositivos IoT ou ambientes embarcados onde instalar bibliotecas Lua pode não ser viável, use o cURL via os.execute ou io.popen:

local cjson = require('cjson')

local cpf = '12345678900'
local api_key = 'SUA_CHAVE_DE_API'

local comando = string.format(
    'curl -s -X GET "https://api.cpfhub.io/cpf/%s" '
    .. '-H "x-api-key: %s" '
    .. '-H "Accept: application/json" '
    .. '--max-time 30',
    cpf, api_key
)

local handle = io.popen(comando)
local resultado = handle:read('*a')
handle:close()

if resultado and #resultado > 0 then
    local data = cjson.decode(resultado)

    if data.success then
    print('Nome: ' .. data.data.name)
    print('Genero: ' .. data.data.gender)
    print('Nascimento: ' .. data.data.birthDate)
    else
    print('Consulta sem sucesso.')
    end
else
    print('Erro ao executar cURL.')
end

5. Exemplo de resposta da API

A API da CPFHub.io retorna um JSON estruturado com os dados do titular:

{
    "success": true,
    "data": {
    "cpf": "12345678900",
    "name": "Joao da Silva",
    "nameUpper": "JOAO DA SILVA",
    "gender": "M",
    "birthDate": "15/06/1990",
    "day": 15,
    "month": 6,
    "year": 1990
    }
}
  • success -- Indica se a consulta foi realizada com sucesso.
  • name / nameUpper -- Nome completo do titular em formato padrão e maiúsculas.
  • gender -- Gênero do titular (M ou F).
  • birthDate -- Data de nascimento completa.
  • day, month, year -- Componentes da data separados, úteis para verificação de idade.

6. Caso de uso -- Verificação de idade em jogos e apostas

Com a regulamentação de apostas no Brasil, plataformas de betting e jogos online precisam verificar se o jogador tem 18 anos ou mais. A API da CPFHub.io retorna a data de nascimento, permitindo essa validação:

local cjson = require('cjson')

function verificar_idade_minima(data_api, idade_minima)
    local ano_atual = tonumber(os.date('%Y'))
    local mes_atual = tonumber(os.date('%m'))
    local dia_atual = tonumber(os.date('%d'))

    local idade = ano_atual - data_api.year
    if mes_atual < data_api.month then
    idade = idade - 1
    elseif mes_atual == data_api.month and dia_atual < data_api.day then
    idade = idade - 1
    end

    return idade >= idade_minima
end

-- Exemplo de uso com dados da API
local dados_jogador = {
    name = 'Joao da Silva',
    day = 15,
    month = 6,
    year = 1990,
}

if verificar_idade_minima(dados_jogador, 18) then
    print('Jogador autorizado: maior de 18 anos.')
else
    print('Jogador nao autorizado: menor de 18 anos.')
end

7. Caso de uso -- Validação em dispositivos IoT

Em sistemas IoT com NodeMCU ou ESP32 rodando Lua, a validação de CPF pode ser útil em terminais de autoatendimento, catracas inteligentes ou totens de cadastro:

  • Totem de cadastro -- Validar o CPF informado pelo usuário antes de emitir um crachá ou liberar acesso.

  • Catraca inteligente -- Confirmar a identidade do visitante em portarias automatizadas.

  • Terminal de ponto -- Verificar dados do funcionário durante o registro de ponto eletrônico.

Para esses cenários, a abordagem via cURL com io.popen é a mais adequada, dado o ambiente restrito dos dispositivos embarcados.


8. Boas práticas

  • Defina timeouts adequados -- Em ambientes IoT, a conectividade pode ser instável. Configure timeouts generosos para evitar falhas.

  • Implemente cache local -- Armazene resultados em tabelas Lua ou arquivos temporários para reduzir chamadas à API.

  • Valide o CPF localmente -- Antes de consultar a API, verifique se o CPF possui 11 dígitos e se os dígitos verificadores são válidos.

  • Respeite os rate limits -- O plano gratuito permite 1 requisição a cada 2 segundos. O plano Pro (R$ 149/mês) permite 1 requisição por segundo.


Perguntas frequentes

Quais bibliotecas Lua são recomendadas para consumir a API de CPF?

Para ambientes completos com LuaRocks, lua-requests é a opção mais simples — a interface é similar ao requests do Python. Em ambientes sem LuaRocks, use LuaSocket com LuaSec para suporte a HTTPS. Em dispositivos IoT restritos como NodeMCU, a abordagem via io.popen com cURL é a mais confiável por não exigir instalação de bibliotecas adicionais.

A API de CPF funciona em dispositivos IoT com conectividade instável?

Sim, mas exige configuração cuidadosa de timeout e retry. Configure --max-time 30 no cURL e implemente uma função de retry com backoff exponencial para lidar com falhas de rede. Para dispositivos com memória muito limitada, armazene o resultado da consulta localmente e reutilize durante a sessão — assim uma queda de conexão não interrompe o fluxo completo.

Como validar a maioridade de jogadores usando a API de CPF em Lua?

A API retorna day, month e year separados, o que simplifica o cálculo de idade em Lua. Compare o ano atual com o ano de nascimento, ajuste para meses e dias, e verifique se o resultado é >= 18. Veja o exemplo completo na seção 6 deste artigo. Esse fluxo atende ao requisito de verificação de maioridade exigido pela regulamentação brasileira de apostas esportivas.

É possível usar a API CPFHub.io em servidores de jogos Roblox ou Love2D?

Em Roblox, o acesso a APIs externas é feito via HttpService:GetAsync no lado servidor (Script, não LocalScript). A chamada deve incluir o header x-api-key e respeitar as políticas de HTTPS do Roblox. Em Love2D com LuaJIT, use lua-requests ou LuaSocket normalmente. Em ambos os casos, nunca exponha a chave de API no cliente — mantenha as chamadas no servidor.


Conclusão

Consumir a API de consulta de CPF em Lua é viável em diferentes cenários, desde servidores de jogos online até dispositivos IoT. As bibliotecas lua-requests e LuaSocket oferecem interfaces práticas para requisições HTTP, enquanto a abordagem via cURL atende ambientes mais restritos.

A CPFHub.io oferece latência de ~900ms, SLA de 99,9% e plano gratuito com 50 consultas mensais — suficiente para validar identidades em protótipos IoT e jogos em desenvolvimento sem custo inicial.

Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

Redação CPFHub.io

Sobre a redação

Redação CPFHub.io

Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.

WhatsAppFale conosco via WhatsApp