Packages
krug
2.0.18
2.0.36
2.0.35
2.0.34
2.0.33
2.0.32
2.0.31
2.0.30
2.0.29
2.0.27
2.0.26
2.0.25
2.0.24
2.0.23
2.0.22
2.0.20
2.0.19
2.0.18
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.1
2.0.0
1.1.53
1.1.52
1.1.50
1.1.49
1.1.48
1.1.47
1.1.46
1.1.45
1.1.44
1.1.43
1.1.42
1.1.41
1.1.40
1.1.39
1.1.38
1.1.37
1.1.36
1.1.35
1.1.34
1.1.33
1.1.32
1.1.31
1.1.30
1.1.29
1.1.28
1.1.27
1.1.26
1.1.25
1.1.24
1.1.23
1.1.22
1.1.21
1.1.20
1.1.19
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.12
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
A Utilitary package functionalities modules for improve a secure performatic development.
Current section
Files
Jump to
Current section
Files
lib/krug/util/cipher.util.ex
defmodule Krug.CipherUtil do
@moduledoc """
Utilitary module for get help on cipher operations.
"""
@moduledoc since: "1.1.41"
alias Krug.StringUtil
alias Krug.MathUtil
@doc """
Calculates the unique number from a string.
You could use "skip_verification" parameter as true, if you are sure that
values already were verified (not nil/empty and not need be trimmed), this will improve performance.
## Examples
```elixir
iex > Krug.CipherUtil.calculate_string_value(nil)
0
```
```elixir
iex > Krug.CipherUtil.calculate_string_value("")
0
```
```elixir
iex > Krug.CipherUtil.calculate_string_value(" ")
0
```
```elixir
iex > Krug.CipherUtil.calculate_string_value("A")
130
```
```elixir
iex > Krug.CipherUtil.calculate_string_value("echo.ping@blabla.com")
217583302
```
```elixir
iex > Krug.CipherUtil.calculate_string_value("jhon.titor@timetraveler.com")
28001410572
```
"""
def calculate_string_value(string,skip_verification \\ false) do
cond do
(skip_verification)
-> string
|> String.graphemes()
|> calculate_string_value_graphemes()
(nil == string
or string |> StringUtil.trim() == "")
-> 0
true
-> string
|> StringUtil.trim()
|> String.graphemes()
|> calculate_string_value_graphemes()
end
end
defp calculate_string_value_graphemes(graphemes,unique_number \\ 0,counter \\ 1) do
cond do
(Enum.empty?(graphemes))
-> unique_number
true
-> graphemes
|> tl()
|> calculate_string_value_graphemes(
graphemes |> hd() |> calculate_grapheme(unique_number,counter),
counter + 1
)
end
end
defp calculate_grapheme(grapheme,unique_number,counter) do
factor = MathUtil.pow(2,counter)
<<char_code::utf8>> = grapheme
(char_code * factor) + unique_number
end
end