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)