DEV Community

Gabriel Barcelos | C#, AspNetCore, ReactJS
Gabriel Barcelos | C#, AspNetCore, ReactJS

Posted on • Originally published at gabrielrb.net

Código único com NanoID.net

Nas suas aplicações, quantas vezes você já precisou de um código único? Seja para identificar um cadastro, um produto no pedido, etc?

O GUID é confiável, mas tem um tamanho exagerado, não? Podemos concordar que ele é ininteligível e difícil de decorar?

Pois bem, encontrei uma alternativa que gostaria de compartilhar: [HASH-ID[(https://hashids.org/).

Uma biblioteca openSource que tem implementações em diversas linguagens e plataformas: JavaScript, Ruby, Python, Java, Scala, PHP, Perl, Perl 6, Swift, Clojure, Objective-C, C, C++11, D, F#, Go, Erlang, Lua, Haskell, OCaml, Elixir, Rust, Smalltalk, ColdFusion, Kotlin, Nim, VBA, Haxe, Crystal, Elm, ActionScript, Bash, R, TSQL, PostgreSQL, PLpgSQL, Dart, Io and for .NET

É muito fácil de usar. Veja um exemplo de código em CSharp:

public string GerarCodigoDaVenda(){
  return Nanoid.Nanoid.Generate( 
     alphabet: "1234567890abcdefghijklmnopqrstuwvxyz", 
     size: 10
   );                
}
Enter fullscreen mode Exit fullscreen mode

No trecho de código acima, eu delimitei a variedade de caracteres que o NanoID vai utilizar, além de especificar o tamanho em 10 caracteres.

Variações do NanoID:

  1. Normal
// Na modalidade padrão, o método usa símbolos amigáveis com URLS (A-Za-z0-9_~), e retorna um ID com 21 caracteres (chances de colisão similares ao formato UUID v4).

var idNormal = Nanoid.Generate();
//resultado: "Uakgb_J5m9g~0JDMbcJqLJ"

// Símbolos -,.() não são codificados em URL´s.

// Se você quiser reduzir o tamanho do ID, passe o tamanho como argumento:
var idReduzido = Nanoid.Generate(size:10) 

//resultado "IRFa~VaY2b"
Enter fullscreen mode Exit fullscreen mode
  1. Customizado
// ⚠️ A variação de caracteres deve conter 256 símbolos ou menos. De outra forma não será seguro.
var id = Nanoid.Generate('1234567890abcdef', 10) //=> "4f90d13a42"
Enter fullscreen mode Exit fullscreen mode

Top comments (0)