Descodificador de Snowflake ID do X (Twitter)
Introdução
Cada publicação no X carrega um ID numérico, e esse número não é aleatório. Desde novembro de 2010 que o X constrói os IDs de tweet no formato snowflake — um inteiro de 64 bits que empacota a hora exata da publicação, a identidade da máquina geradora e um contador de sequência num único número ordenável. O Descodificador de Snowflake ID do X (Twitter) da Toollect desembrulha esse número — cole um ID de tweet, 2089759704335482961, e recebe o instante preciso da publicação, 18 de agosto de 2026 às 17:01:54.028 UTC, juntamente com o número de worker, a sequência e a estrutura binária completa do ID.
Colar em alternativa um link de estado completo funciona da mesma maneira — o descodificador extrai primeiro o ID do URL, por isso https://x.com/jack/status/2089759704335482961 e o número nu produzem resultados idênticos. Em ambos os casos aparecem oito linhas de resultados enquanto escreve — quatro que descrevem quando (hora local, UTC, ISO 8601 e milissegundos Unix, mais uma idade relativa compacta) e três que descrevem o que dizem os bits (worker ID, sequência e o binário completo de 64 bits).
A descodificação é aritmética de bits pura, não uma consulta. Nada é enviado ao X, não é preciso chave de API e não existe limite de pedidos — o cálculo corre no seu navegador enquanto escreve, e o mesmo ID descodifica-se no mesmo instante em qualquer parte do mundo, para sempre.
Casos de uso
Um número que registra em segredo a sua própria hora de nascimento revela-se útil em mais tarefas do que se esperaria.
Jornalismo e verificação
Capturas de ecrã, republicações e citações destacam uma publicação do seu ritmo original. Descodificar o ID restaura-o — o milissegundo exato da criação está escrito dentro do número, independentemente do que a página em redor afirma. Os verificadores de factos usam isto para estabelecer se uma publicação precede ou sucede o acontecimento de que fala — o ID não pode ser editado depois, ao contrário do texto à volta.
Análise de dados e arquivos
Ordenar IDs numericamente é ordenar publicações cronologicamente — sem necessidade de coluna de marca temporal. Os analistas que exportam IDs de tweet de APIs ou conjuntos de dados usam o descodificador para ancorar esses IDs a datas de calendário, detetar falhas de recolha e desduplicar arquivos onde o mesmo tweet chegou por várias formas de URL mas sempre transportou o mesmo número.
Moderação e investigação
Ao rever uma vaga de atividade, a linha relativa dá logo uma noção da escala — minutos contra meses — sem ler marcas temporais em voz alta. Os investigadores que estudam padrões de eliminação ou comportamentos de republicação descodificam intervalos de IDs para reconstruir cronologias que já não existem publicamente.
Programadores e integrações
O código que armazena IDs de tweet precisa muitas vezes de uma verificação de sanidade durante o desenvolvimento — será esta constante realmente um ID plausível de tweet, e que momento reclama ser? Colar o valor aqui responde com uma tecla, e copiar a saída ISO encaixa direita em registos, fixtures ou sementes de base de dados.
Como funciona
A ferramenta trabalha enquanto escreve — não há botão a premir. Cada tecla percorre os mesmos quatro passos:
- Classificar a entrada — o texto é comparado com duas formas — um snowflake nu de 15 a 19 dígitos, ou um link de estado do x.com/twitter.com que transporte um. Qualquer outra coisa mostra a mensagem de entrada inválida.
- Extrair o ID — de um URL ignora-se tudo exceto a rota de estado e o número — subdomínios, variantes de vista como
/photo/1e parâmetros de consulta nunca chegam ao cálculo. - Descodificar os bits — deslocações BigInt retiram a marca temporal, o worker e a sequência do inteiro de 64 bits, e soma-se a época do Twitter para converter o desvio bruto numa data real — a aritmética está exposta no capítulo Como funciona a descodificação.
- Validar a janela — um ID cuja hora descodificada caísse mais de um minuto no futuro é rejeitado em vez de mostrado, para que números mal digitados ou inventados falhem ruidosamente em vez de produzirem com toda a confiança uma data absurda.
Tudo acontece localmente em bem menos de um milissegundo. A janela de validação é o único juízo do fluxo, e pende para a rejeição — um número que diga ter sido publicado amanhã não é um tweet.
Formatos de entrada suportados
Duas famílias de entrada descodificam-se, e tudo o resto é rejeitado com uma mensagem clara. O contrato é deliberadamente estreito — esta ferramenta faz uma coisa a um único tipo de número.
Formatos aceites
| Formato | Exemplo | Detetado como |
|---|---|---|
| Snowflake nu | 2089759704335482961 |
ID de tweet |
| Link de estado | x.com/jack/status/2089759704335482961 |
URL → ID |
| Com protocolo e subdomínio | https://www.twitter.com/jack/status/2089759704335482961/ |
URL → ID |
| Subdomínio móvel | https://mobile.x.com/jack/status/2089759704335482961 |
URL → ID |
| Subdomínio curto | m.twitter.com/jack/status/2089759704335482961 |
URL → ID |
| Variante de vista | x.com/jack/status/2089759704335482961/photo/1 |
URL → ID |
| Parâmetros de rastreio | x.com/jack/status/2089759704335482961?s=20&t=abc |
URL → ID |
Ambos os domínios — x.com e twitter.com — comportam-se de forma idêntica em todas as formas de hospedeiro, o prefixo https:// é opcional, e barras finais, variantes de foto ou vídeo e cadeias de consulta são toleradas e descartadas. Venha na forma que vier — o ID extraído é o mesmo, pelo que a saída descodificada é idêntica byte a byte nas sete linhas da tabela.
Formatos rejeitados
| Entrada | Porque é rejeitada |
|---|---|
x.com/jack/ |
Um perfil — sem rota de estado, sem ID |
x.com/i/web/status/2089759704335482961 |
Rota da app web sem nome de utilizador — não tem a forma {user}/status/{id} |
x.com/search?q=snowflake |
Uma página de pesquisa — transporta uma consulta, não um ID |
12345678901234 (14 dígitos) |
Demasiado curto — anterior ao formato ou truncado |
12345678901234567890 (20 dígitos) |
Demasiado longo — nenhum valor que o X alguma vez emitiu |
| Um snowflake do Discord | Descodifica-se sem erro, mas com data errada — ver O que a ferramenta não faz |
Duas rejeições merecem explicação. A rota da app web x.com/i/web/status/… aparece quando o cliente de página única reescreve endereços internamente, mas omite o segmento do nome de utilizador, pelo que não cabe na gramática acima — cole a forma canónica e o mesmo ID descodifica normalmente. E repare bem na última linha — um ID do Discord passa a verificação de comprimento e descodifica-se para uma data de aspeto plausível. O descodificador não o consegue detetar, e esse limite fica documentado honestamente em vez de maquilhado.
Anatomia de um Snowflake ID
Um snowflake é um inteiro de 64 bits cortado em quatro campos. Lido a partir do bit mais significativo:
| Bits | Largura | Campo | Significado |
|---|---|---|---|
| 63 | 1 | Sinal | Sempre 0 — mantém o valor positivo em linguagens com sinal |
| 62–22 | 41 | Marca temporal | Milissegundos desde a época do Twitter, 04/11/2010 às 01:42:54.657 UTC |
| 21–12 | 10 | Worker | Que máquina gerou o ID |
| 11–0 | 12 | Sequência | Contador por máquina — o N.º ID dentro do mesmo milissegundo |
A época
As marcas temporais não contam desde 1970 — contam desde o 4 de novembro de 2010 às 01:42:54.657 UTC, o momento em que o serviço snowflake substituiu os IDs sequenciais. Escolher uma época fresca mantém o campo da marca temporal pequeno — 41 bits guardam cerca de 2,2 biliões de milissegundos, uns 69,7 anos de margem. O formato esgota-se por isso apenas em julho de 2080 — confortavelmente longe, e uma das razões pelas quais o campo não pode ser alargado sem partir todos os clientes existentes.
Um exemplo trabalhado
Tome o ID usado em todas as ferramentas do X deste site — 2089759704335482961. Cortado pelos limites dos campos, lê-se de uma vez cada valor que o descodificador imprime:
| Campo | Intervalo de bits | Binário | Descodificado |
|---|---|---|---|
| Marca temporal | 63–22 | 000111010000000001010001011000010000101011 |
2026-08-18T17:01:54.028Z |
| Worker | 21–12 | 0101111000 |
376 |
| Sequência | 11–0 | 000001010001 |
81 |
O zero inicial na linha da marca temporal é o bit de sinal, sempre zero. Cada linha de saída deriva desta única divisão — os bits da marca temporal tornam-se o instante da publicação, o campo worker dá nome à máquina 376, e a sequência mostra que este foi o ID número 81 cunhado por essa máquina naquele milissegundo.
Quantos IDs cabem
A sequência de 12 bits permite até 4 096 IDs por máquina por milissegundo, e o campo worker de 10 bits dá nome a até 1 024 máquinas. Na prática, a sequência raramente sobe perto do seu teto — existe para que nunca colidam as rajadas, não para o total. Dois IDs da mesma máquina no mesmo milissegundo diferem apenas nesses doze bits baixos.
A cronologia dos dígitos
Como a marca temporal ocupa os bits altos, o valor total cresce sem parar — o número de algarismos decimais diz aproximadamente quando um ID foi cunhado:
| Algarismos | Primeira aparição | Era |
|---|---|---|
| 15 dígitos | 4 de novembro de 2010 — dia de lançamento | Os snowflakes mais velhos |
| 16 dígitos | 6 de novembro de 2010 | O volume duplicou a contagem em dias |
| 17 dígitos | 1 de dezembro de 2010 | Um mês depois |
| 18 dígitos | 7 de agosto de 2011 | O ano do crescimento |
| 19 dígitos | 25 de maio de 2018 | Intervalo atual — os IDs de hoje começam por 2 |
É por isto que o descodificador aceita de 15 a 19 dígitos e nada mais — 15 cobre as primeiríssimas publicações da era snowflake, 19 tudo o que foi cunhado desde 2018, e nenhum ID legítimo de tweet saiu alguma vez desse intervalo.
Como funciona a descodificação
A matemática são três operações — um deslocamento, duas máscaras e uma adição:
const TWEET_EPOCH = 1288834974657n; // 2010-11-04T01:42:54.657Z em ms Unix
timestampMs = Number((id >> 22n) + TWEET_EPOCH);
workerId = Number((id >> 12n) & 1023n); // os 10 bits baixos do campo intermédio
sequence = Number(id & 4095n); // os 12 bits baixos
Deslocar 22 bits para a direita deita fora os campos de worker e sequência e deixa o desvio da marca temporal desde a época própria; somar a época converte-o em milissegundos Unix comuns. As máscaras isolam depois os dois campos baixos — & 1023 guarda dez bits, & 4095 doze. Trabalhando de novo o exemplo, 2089759704335482961 deslocado dá um desvio de 498237539371 milissegundos, que somado à época vale 1787072514028, ou seja 2026-08-18T17:01:54.028Z; o worker mascarado é 376 e a sequência 81.
Dois detalhes de precisão importam. Primeiro, a ferramenta faz toda a aritmética em BigInt, porque um ID de 19 dígitos excede o intervalo seguro de inteiros do JavaScript (9 007 199 254 740 991) e um número normal arredondaria silenciosamente os bits baixos — corrompendo precisamente os valores de worker e sequência que a ferramenta reporta. Segundo, uma vez convertido, a marca temporal resultante cabe folgada no intervalo seguro, pelo que apresentá-la como número ordinário ao Date não perde nada.
Mais uma coisa que vale a pena saber — outras plataformas cortam esses mesmos 22 bits baixos de forma diferente, e os descodificadores genéricos etiquetam-nos muitas vezes com os nomes de campos de outro sistema:
| Plataforma | 22 bits baixos | Especificação publicada |
|---|---|---|
| X / Twitter | Worker de 10 bits + sequência de 12 bits | Definição da era do blogue; nunca documentada mais além |
| Discord | Worker de 5 bits + processo de 5 bits + incremento de 12 bits | Documentação oficial |
| Mesmo corte do X, outra época e codificação base-64 | Engenharia inversa da comunidade |
Se uma ferramenta lhe mostra o seu ID de tweet dividido entre workerOrShard e processId, está a aplicar os rótulos do Discord aos bits do X — os números calculam-se, mas um tweet não tem campo de processo, e os doze bits baixos são um contador de sequência, não um identificador de processo. Este descodificador fica-se pelos campos que o X define de facto.
Uso
Quatro passos, sem botões:
- Cole a sua entrada — um ID de tweet nu, ou qualquer link de estado do x.com/twitter.com nas formas listadas acima.
- Leia o grupo dos tempos — hora local, UTC, ISO 8601 e milissegundos Unix preenchem-se de imediato, e a linha relativa dá a idade num relance.
- Leia o grupo da anatomia — worker ID, sequência e o binário agrupado mostram como o número está construído.
- Copie o que precisar — cada linha tem o seu próprio botão de cópia; a linha ISO encaixa limpa em folhas de cálculo e registos.
Entrada inválida esvazia as linhas e mostra uma única linha de erro; corrigir a entrada apaga o erro com a mesma automaticidade.
Tutorial passo a passo
Percorra uma descodificação de ponta a ponta.
Passo 1 — Descodificar um ID nu. Cole 2089759704335482961 na entrada. O grupo dos tempos enche de imediato — linha ISO 2026-08-18T17:01:54.028Z, linha Unix 1787072514028 — e o grupo da anatomia informa worker 376, sequência 81, com o binário nos seus grupos 42/10/12.
Passo 2 — Descodificar a partir de um link completo. Esvazie a entrada e cole https://x.com/jack/status/2089759704335482961?s=20&t=abc. Os parâmetros de rastreio não mudam nada — cada linha lê-se idêntica ao passo 1, porque só a rota de estado e o ID sobrevivem à extração.
Passo 3 — Confirmar a independência do domínio. Cole https://www.twitter.com/someone/status/2089759704335482961/ — o domínio antigo com prefixo de utilizador e barra final. Mesmo ID, mesma marca temporal. Venha o link como vier — o número lá dentro é a única fonte de verdade.
Passo 4 — Ver fracassar um ID impossível. Cole 20 — o ID do primeiro tweet alguma vez publicado, da era anterior ao snowflake. O descodificador rejeita-o — dois algarismos não podem transportar uma marca temporal codificada, porque esse ID foi emitido anos antes de o formato existir. A rejeição está correta, não é um bug.
Passo 5 — Levar a saída para onde serve. Prima o botão de copiar da linha ISO e cole numa célula da folha de cálculo — 2026-08-18T17:01:54.028Z ordena-se cronologicamente como texto, sobrevive às viagens de ida e volta em CSV e não precisa de contexto de fuso horário para ser lida.
Dicas de profissional
- Ordenar por ID é ordenar pelo tempo. Onde quer que os IDs de tweet vivam numa coluna — exportações, bases de dados, registos — a ordem por ID é a ordem cronológica. O descodificador ajuda a etiquetar essa ordem com datas reais.
- Prefira a linha ISO para armazenamento. A hora local depende das definições do dispositivo de quem lê; ISO 8601 com o sufixo
Zé inequívoca em todo o lado e ordena-se corretamente como texto simples. - UTC para equipas entre fusos horários. Quando um arquivo abrange continentes, combinem a linha UTC e ninguém discutirá se a publicação atravessou a meia-noite.
- Use a linha relativa para triagem. Ao rever um lote de IDs, a idade compacta —
3h,2d,5mo— separa o fresco do antigo mais depressa do que ler datas completas. - A linha binária é material didático. Mostrar a alguém exatamente que bits são a marca temporal faz clicar todo o formato mais depressa do que qualquer diagrama.
- Emparelhe com o analisador de URL. O analisador limpa e canoniza links; o descodificador dá-lhes data. Passe o mesmo link de estado por ambos e sai com um URL arrumado e uma marca temporal verificada.
Alternativas
De que outras maneiras pode um ID de tweet tornar-se uma data?
| Método | Campos corretos do X | Precisa de API/chave | Envia os seus dados |
|---|---|---|---|
| Deslocação manual de bits | Possível, propenso a erros | Não | Não |
| Snippet da consola do navegador | Se o escrever bem | Não | Não |
| Descodificadores snowflake genéricos | Muitas vezes rotulados para Discord | Às vezes | Sim, normalmente |
| Programar você a matemática | Sim, com cuidado | Não | Não |
| Esta ferramenta | Sim — worker + sequência | Não | Não |
Descodificar à mão são potências de dois e longas cadeias binárias — exequível uma vez, tedioso para sempre, e um bit escorregado estraga a data. Os descodificadores online genéricos miram muitas vezes primeiro o Discord, rotulam mal os campos do X e às vezes erram a época, e costumam enviar o ID para um servidor. Esta ferramenta executa a aritmética exata localmente, rotula os campos como o X os define e rejeita entradas impossíveis em vez de mostrar um ano errado com toda a segurança.
Em comparação com as APIs oficiais
Ler uma hora de criação é a tarefa rara em que a via oficial é estritamente pior:
| Capacidade | API v2 do X | oEmbed | Esta ferramenta |
|---|---|---|---|
| Marca temporal exata da publicação | Sim (created_at) |
Não legível por máquina | Sim, exata |
| Custo | Pagamento por uso, sem nível gratuito | Grátis | Grátis |
| Autenticação | Exigida | Nenhuma | Nenhuma |
| Repartição de worker e sequência | Não | Não | Sim |
| Limites de pedidos | Sim | Sem documentar, limitados na prática | Nenhum — zero pedidos |
Desde fevereiro de 2026 que a API do X é paga por uso sem nível gratuito — obter created_at de um único tweet custa dinheiro e exige credenciais registadas. O oEmbed devolve HTML renderizado para incorporação, sem campo estruturado de marca temporal analisável de forma fiável. A aritmética snowflake entrega o mesmo milissegundo grátis, offline e para sempre — o preço é que não revela nada além do próprio número, precisamente o limite documentado abaixo.
Descodificador vs. analisador de URL
A Toollect envia duas ferramentas do X que ambos leem links de estado e conhecem ambos os IDs snowflake. Respondem a perguntas diferentes:
| Pergunta | Analisador de URL do X | Este descodificador |
|---|---|---|
| Que tipo de link é? | Todos os tipos — tweet, perfil, space, lista, hashtag, pesquisa | Só — transporta um ID de estado? |
| Limpar e canonizar o URL | Sim, com lista de parâmetros removidos | Desnecessário — nada é reconstruído |
| Extrair o ID do tweet | Sim | Sim |
| Descodificar a marca temporal | Não — valida apenas a forma | Sim — todo o trabalho |
| Repartição de worker e sequência | Não | Sim |
| Outras rotas (perfis, spaces, listas) | Analisadas com tipo e detalhe | Rejeitadas como inválidas |
O analisador é o generalista dos links; o descodificador, o especialista dos números. A sua aceitação de URLs completos é uma conveniência — logo que um link pede limpeza, escrita ou explicação, é território do analisador, e as duas ferramentas passam o testemunho limpiamente no ID.
O que a ferramenta não faz
Os limites merecem ser nomeados para que nunca se confie demais no descodificador:
- Não vai buscar nada. Zero pedidos — a ferramenta não consegue ver se o tweet ainda existe, quem o escreveu ou o que diz. Do ID sai apenas o que foi cozido nele à nascença.
- Não consegue inverter a conversão. Devolver uma data a um ID fabrica um número que nenhum tweet recebeu jamais — abra
x.com/i/status/{fabricado}e o X responde que a página não existe. Os IDs sintéticos serviram apenas como limiares de paginação na antiga API gratuita; na web de hoje, os operadores de pesquisa por data fazem esse trabalho diretamente. - Não distingue plataformas. Um snowflake do Discord partilha a estrutura e descodifica-se aqui sem erro — para uma data cerca de quatro anos cedo, porque o Discord conta desde 2015. Se a entrada veio de outra plataforma, trate a saída como errada por construção.
- Não descodifica IDs anteriores a 2010. Os tweets mais velhos do que o serviço snowflake transportam pequenos números sequenciais sem relógio embutido — literalmente não há nada para descodificar.
- Não adivinha. Uma entrada que não corresponda a nenhuma forma aceite mostra a mensagem de erro em vez de um resultado parcial.
Solução de problemas
| Problema | Causa | Solução |
|---|---|---|
| Um número longo mostra o erro | Não tem 15–19 dígitos, ou contém caracteres que não são dígitos | Copie o ID completo — as células de folhas de cálculo às vezes truncam algarismos iniciais ou acrescentam separadores |
| Um link mostra o erro | Ao URL falta a forma {user}/status/{id} |
Verifique se é a forma da app web x.com/i/web/status/… — cole em alternativa o link canónico com o perfil |
| Um ID de mensagem do Discord descodifica sem problema | Mesma divisão de bits, outra época — a ferramenta não distingue plataformas | Considere o resultado incorreto; este descodificador é do X por conceção |
| A marca temporal parece estar anos desviada | Provavelmente o caso acima — um snowflake de outra plataforma | Verifique a origem do ID antes de confiar na data |
| A linha relativa mostra um fosso enorme | ID muito recente ou relógios de sistema ligeiramente diferentes | O valor relativo compara com o relógio do seu dispositivo — para registos fie-se das linhas absolutas |
| O ID descodifica mas o tweet desapareceu | A eliminação é invisível para a aritmética offline | A marca temporal continua a ser história válida — a existência exige verificar o X |
Privacidade e tratamento de dados
Este descodificador opera sob o modelo de privacidade mais rigoroso do site — não faz nenhum pedido de rede.
- Nada é enviado. Descodificar é aritmética de bits no seu navegador. O ID ou link que colar nunca chega a servidor algum.
- Sem conta, sem analítica, sem scripts de terceiros. A página executa apenas o seu próprio código.
- Nada é guardado. Sem cookies, sem estado entre visitas — feche o separador e a sessão desaparece.
Para fluxos de trabalho com IDs de arquivos privados, conjuntos de dados de investigação ou filas de moderação, a descodificação acontece inteiramente no seu dispositivo.
Especificações técnicas
Detalhes:
- Formato — snowflake de 64 bits — sinal (1 bit) + marca temporal (41 bits, ms desde
2010-11-04T01:42:54.657Z) + worker (10 bits) + sequência (12 bits) - Precisão — aritmética BigInt de ponta a ponta; resultados exatos para todos os IDs de 19 dígitos fora do intervalo seguro de inteiros do JavaScript
- Janela de validação — a hora descodificada não pode ultrapassar a atual em mais de 60 segundos; valores anteriores à época são inatingíveis a partir de 15 dígitos
- Formatos de entrada —
\d{15,19}nu, ou URLs de estado do x.com/twitter.com com protocolo opcional, subdomínioswww./mobile./m., variantes de vista e cadeias de consulta - Saída — hora local, cadeia UTC, ISO 8601, milissegundos Unix, idade relativa, worker ID, sequência, binário de 64 bits agrupado — cada linha copiável individualmente
- Processamento — JavaScript 100 % do lado do cliente, zero pedidos de rede, sem chave de API, sem componente de servidor
- Suporte de navegadores — todos os navegadores modernos (BigInt e Clipboard API)
Recursos
- Descodifica qualquer ID snowflake do X ou Twitter no seu momento exato de publicação, ao milissegundo
- Aceita IDs de tweet isolados e links de estado completos do x.com ou twitter.com — o ID é extraído automaticamente
- Apresenta o momento descodificado de quatro formas — hora local, UTC, ISO 8601 e milissegundos Unix
- Divide o ID nas suas partes — worker ID, contador de sequência e a decomposição binária completa de 64 bits
- Rejeita valores impossíveis — IDs com data futura mostram um erro em vez de uma suposição
- Funciona inteiramente no seu navegador sem pedidos de rede — sem chave de API nem conta
- Cópia com um clique em cada linha de resultados