Controle de Vendas & Estoque (Freeware em java)
Este é um programa para controle de vendas e estoque em um estabelecimento comercial. É feito em Java e todo o código está dísponível. O programa está em desenvolvimento e novas funcionalidades estão sendo criadas. O código é facilmente adaptável à outras aplicações, para importar o código use Ecliple IDE 3.2 ou posterior.
Download:
https://sourceforge.net/projects/vendasestoquedl
sábado, 29 de novembro de 2008
terça-feira, 25 de novembro de 2008
Exemplo de gráfico de barras com JFreeChart
//Requerido a Api JFreeChart
import java.awt.Dimension;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarsGraphic extends JFrame{
public BarsGraphic(String title) {
super(title);
CategoryDataset dataset = BarsGraphic.createDataset();
JFreeChart chart = BarsGraphic.createBarChart(dataset);
ChartPanel panel = new ChartPanel(chart);
panel.setPreferredSize(new Dimension(400, 300));
setContentPane(panel);
}
private static CategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(6, "Preto", "Corsa");
dataset.addValue(4, "Preto", "Fiesta");
dataset.addValue(3, "Preto", "Gol");
dataset.addValue(5, "Vermelho", "Corsa");
dataset.addValue(2, "Vermelho", "Fiesta");
dataset.addValue(3, "Vermelho", "Gol");
dataset.addValue(2, "Azul", "Corsa");
dataset.addValue(8, "Azul", "Fiesta");
dataset.addValue(1, "Azul", "Gol");
return dataset;
}
private static JFreeChart createBarChart(CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart(
"Escolha de cor por veículo", //Titulo
"Veículo", // Eixo X
"Quantidade", //Eixo Y
dataset, // Dados para o grafico
PlotOrientation.VERTICAL, //Orientacao do grafico
true, false, false); // exibir: legendas, tooltips, url
return chart;
}
public static void main( String[] args ) {
BarsGraphic chart = new BarsGraphic("Teste Bar Chart");
chart.pack();
chart.setVisible(true);
}
}
// outra ferramenta mais leve pode ser encontrada em:
// http://www.java2s.com/Code/Java/Chart/CatalogChart.htm
import java.awt.Dimension;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarsGraphic extends JFrame{
public BarsGraphic(String title) {
super(title);
CategoryDataset dataset = BarsGraphic.createDataset();
JFreeChart chart = BarsGraphic.createBarChart(dataset);
ChartPanel panel = new ChartPanel(chart);
panel.setPreferredSize(new Dimension(400, 300));
setContentPane(panel);
}
private static CategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(6, "Preto", "Corsa");
dataset.addValue(4, "Preto", "Fiesta");
dataset.addValue(3, "Preto", "Gol");
dataset.addValue(5, "Vermelho", "Corsa");
dataset.addValue(2, "Vermelho", "Fiesta");
dataset.addValue(3, "Vermelho", "Gol");
dataset.addValue(2, "Azul", "Corsa");
dataset.addValue(8, "Azul", "Fiesta");
dataset.addValue(1, "Azul", "Gol");
return dataset;
}
private static JFreeChart createBarChart(CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart(
"Escolha de cor por veículo", //Titulo
"Veículo", // Eixo X
"Quantidade", //Eixo Y
dataset, // Dados para o grafico
PlotOrientation.VERTICAL, //Orientacao do grafico
true, false, false); // exibir: legendas, tooltips, url
return chart;
}
public static void main( String[] args ) {
BarsGraphic chart = new BarsGraphic("Teste Bar Chart");
chart.pack();
chart.setVisible(true);
}
}
// outra ferramenta mais leve pode ser encontrada em:
// http://www.java2s.com/Code/Java/Chart/CatalogChart.htm
Instalando e configurando o Archiva no Tomcat
Primeiramente você terá que fazer o download do Apache Tomcat e do Archiva e do Java. A versões usadas nesse tutorial foram:
- Java 1.6;
- Tomcat 5.27;
- Archiva 1.2-M1.
Faça o download do War e do Standalone do Archiva pois iremos precisar dos dois.
- Java: http://java.sun.com/javase/downloads/index.jsp
- Tomcat: http://tomcat.apache.org/download-55.cgi
- Archiva: http://archiva.apache.org/download.html
Agora vamos as instalações:
• Instale o Java em sua máquina e crie uma variável de ambiente chamada JAVA_HOME, e aponte ela para o local que foi instalado o Java;
• Depois descompacte o Tomcat no C:\ da sua máquina e crie uma variável de ambiente chamada CATALINA_HOME, e aponte para o local que você descompactou o Tomcat;
• Agora crie uma pasta chamada ‘archiva’ dentro do Tomcat, no mesmo nível que as pastas bin, conf, logs e outras;
• Copie o arquivo War do Archiva para dentro desta pasta que você acabou de criar;
• Crie um arquivo chamado ‘archiva.xml’ e coloque dentro da pasta
tomcat_home/conf/Catalina/localhost/ com o seguinte conteúdo:
link para o contéudo
Observação: Na tag Resource, a propriedade url é o caminho do banco de dados que o Archiva irá usar. Você pode definir qualquer caminho.
• Agora descompacte o Archiva Standalone que você baixou. Acesse a pasta descompactada e abra a pasta lib. Dentro desta pasta copie esses 3 arquivos:
- derby-10.1.3.1.jar (or later);
- activation-1.1.jar;
- mail-1.4.jar.
Abra a pasta tomcat_home\common\lib e cole esses 3 arquivos.
• Agora crie mais uma variável de ambiente chamada CATALINA_OPTS com o seguinte valor:
CATALINA_OPTS="-Dappserver.home=$CATALINA_HOME -Dappserver.base=$CATALINA_HOME"
Pronto! Agora é só acessar http://localhost:8080/archiva e começar a usar. A primeira página que o Archiva irá lhe mostrar será uma página pedindo para você cadastrar um Administrador.
Configurando o Maven com o Archiva
Para usar o Archiva como repositório para o Maven você precisa criar um arquivo chamado settings.xml e colocar dentro da pasta user_home/.m2. O conteúdo desse arquivo será:
link para conteúdo
Para que você consiga fazer o deploy de sua aplicação você precisa inserir o seguinte código no seu pom.xml:
link para conteúdo
Agora é só usar!
Tutorial elaborado por Rodrigo Luís de Faria.
Email: rodrigolfsi@gmail.com
- Java 1.6;
- Tomcat 5.27;
- Archiva 1.2-M1.
Faça o download do War e do Standalone do Archiva pois iremos precisar dos dois.
- Java: http://java.sun.com/javase/downloads/index.jsp
- Tomcat: http://tomcat.apache.org/download-55.cgi
- Archiva: http://archiva.apache.org/download.html
Agora vamos as instalações:
• Instale o Java em sua máquina e crie uma variável de ambiente chamada JAVA_HOME, e aponte ela para o local que foi instalado o Java;
• Depois descompacte o Tomcat no C:\ da sua máquina e crie uma variável de ambiente chamada CATALINA_HOME, e aponte para o local que você descompactou o Tomcat;
• Agora crie uma pasta chamada ‘archiva’ dentro do Tomcat, no mesmo nível que as pastas bin, conf, logs e outras;
• Copie o arquivo War do Archiva para dentro desta pasta que você acabou de criar;
• Crie um arquivo chamado ‘archiva.xml’ e coloque dentro da pasta
tomcat_home/conf/Catalina/localhost/ com o seguinte conteúdo:
link para o contéudo
Observação: Na tag Resource, a propriedade url é o caminho do banco de dados que o Archiva irá usar. Você pode definir qualquer caminho.
• Agora descompacte o Archiva Standalone que você baixou. Acesse a pasta descompactada e abra a pasta lib. Dentro desta pasta copie esses 3 arquivos:
- derby-10.1.3.1.jar (or later);
- activation-1.1.jar;
- mail-1.4.jar.
Abra a pasta tomcat_home\common\lib e cole esses 3 arquivos.
• Agora crie mais uma variável de ambiente chamada CATALINA_OPTS com o seguinte valor:
CATALINA_OPTS="-Dappserver.home=$CATALINA_HOME -Dappserver.base=$CATALINA_HOME"
Pronto! Agora é só acessar http://localhost:8080/archiva e começar a usar. A primeira página que o Archiva irá lhe mostrar será uma página pedindo para você cadastrar um Administrador.
Configurando o Maven com o Archiva
Para usar o Archiva como repositório para o Maven você precisa criar um arquivo chamado settings.xml e colocar dentro da pasta user_home/.m2. O conteúdo desse arquivo será:
link para conteúdo
Para que você consiga fazer o deploy de sua aplicação você precisa inserir o seguinte código no seu pom.xml:
link para conteúdo
Agora é só usar!
Tutorial elaborado por Rodrigo Luís de Faria.
Email: rodrigolfsi@gma
domingo, 16 de novembro de 2008
Criptografia Base64 em Lua
--implementacao de criptografia Base64 em linguagem Lua.
local bin = { }
function bin.imod(a, b)
return a - math.floor(a / b) * b
end
function bin.rshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a / (2 ^ b))
end
function bin.lshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a * (2 ^ b))
end
function bin.band(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) and (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) or (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bxor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1 ~= b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bnot(a)
local i, v, r, b
if (a < 0) then
a = 4294967296 + a
end
a = bin.imod(a, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b = a >= v
if (b) then
a = a - v
else
r = r + v
end
end
return r
end
local cb64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
b64 = {}
local function istr(p)
return string.sub(cb64, p + 1, p + 1)
end
function b64.encodeblock(in_tab, len)
local s1, s2, s3, s4
in_tab[0] = in_tab[1] or 0
in_tab[1] = in_tab[2] or 0
in_tab[2] = in_tab[3] or 0
s1 = istr(bin.rshift(in_tab[0], 2))
s2 = istr(bin.bor(bin.lshift(bin.band(in_tab[0], 3), 4), bin.rshift(bin.band(in_tab[1], 240), 4)))
s3 = (len > 1 and istr(bin.bor(bin.lshift(bin.band(in_tab[1], 15), 2), bin.rshift(bin.band(in_tab[2], 192), 6))) or "=")
s4 = (len > 2 and istr( bin.band(in_tab[2], 63)) or "=")
return s1..s2..s3..s4
end
function b64.encode(stream, stream_size)
local encoded = ""
local e_block
local in_tab, len, i, s_pos
s_pos = 0
while stream_size > 0 do
in_tab = {}
len = stream_size >= 3 and 3 or stream_size
for i = 1, len do
in_tab[i] = stream[s_pos + i]
end
e_block = b64.encodeblock(in_tab, len)
encoded = encoded .. e_block
s_pos = s_pos + 3
stream_size = stream_size - 3
end
return encoded
end
local function stri(s)
return s == "=" and -1 or (string.find(cb64, s) - 1)
end
function b64.decodeblock(s1, s2, s3, s4)
local b1, b2, b3, len
len = s3 == "=" and 1 or s4 == "=" and 2 or 3
s3 = s3 == "=" and "A" or s3
s4 = s4 == "=" and "A" or s4
s1 = stri(s1)
s2 = stri(s2)
s3 = stri(s3)
s4 = stri(s4)
b1 = bin.bor(bin.lshift(s1, 2), bin.rshift(s2, 4))
b2 = bin.bor(bin.band(bin.lshift(s2, 4), 255), bin.rshift(s3, 2))
b3 = bin.bor(bin.band(bin.lshift(s3, 6), 240), s4)
return {b1, b2, b3}, len
end
function b64.decode(str_in)
local s_len = string.len(str_in) / 4
local out, len, i, j, t_out, s1, s2, s3, s4, t_len = {}, 0
for i = 1, s_len do
s1 = string.sub(str_in, i * 4 - 3, i * 4 - 3)
s2 = string.sub(str_in, i * 4 - 2, i * 4 - 2)
s3 = string.sub(str_in, i * 4 - 1, i * 4 - 1)
s4 = string.sub(str_in, i * 4 - 0, i * 4 - 0)
t_out, t_len = b64.decodeblock(s1, s2, s3, s4)
for j = 1, t_len do
out[i * 3 - 3 + j] = t_out[j]
end
len = len + t_len
end
return out, len
end
b64_test_in = {
48, 49, 50, 51, 52, 53, 54, 55, 56, 57
}
b64_test_enc = "MDEyMzQ1Njc4OQ=="
function test_b64()
local enc, dec, i, len
enc = b64.encode(b64_test_in, 10)
assert(enc == b64_test_enc)
dec, len = b64.decode(enc)
assert(len == 10)
for i = 1, len do
assert(b64_test_in[i] == dec[i])
end
end
test_b64()
print(b64.encode(b64_test_in, 10))
local bin = { }
function bin.imod(a, b)
return a - math.floor(a / b) * b
end
function bin.rshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a / (2 ^ b))
end
function bin.lshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a * (2 ^ b))
end
function bin.band(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) and (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) or (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bxor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1 ~= b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bnot(a)
local i, v, r, b
if (a < 0) then
a = 4294967296 + a
end
a = bin.imod(a, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b = a >= v
if (b) then
a = a - v
else
r = r + v
end
end
return r
end
local cb64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
b64 = {}
local function istr(p)
return string.sub(cb64, p + 1, p + 1)
end
function b64.encodeblock(in_tab, len)
local s1, s2, s3, s4
in_tab[0] = in_tab[1] or 0
in_tab[1] = in_tab[2] or 0
in_tab[2] = in_tab[3] or 0
s1 = istr(bin.rshift(in_tab[0], 2))
s2 = istr(bin.bor(bin.lshift(bin.band(in_tab[0], 3), 4), bin.rshift(bin.band(in_tab[1], 240), 4)))
s3 = (len > 1 and istr(bin.bor(bin.lshift(bin.band(in_tab[1], 15), 2), bin.rshift(bin.band(in_tab[2], 192), 6))) or "=")
s4 = (len > 2 and istr( bin.band(in_tab[2], 63)) or "=")
return s1..s2..s3..s4
end
function b64.encode(stream, stream_size)
local encoded = ""
local e_block
local in_tab, len, i, s_pos
s_pos = 0
while stream_size > 0 do
in_tab = {}
len = stream_size >= 3 and 3 or stream_size
for i = 1, len do
in_tab[i] = stream[s_pos + i]
end
e_block = b64.encodeblock(in_tab, len)
encoded = encoded .. e_block
s_pos = s_pos + 3
stream_size = stream_size - 3
end
return encoded
end
local function stri(s)
return s == "=" and -1 or (string.find(cb64, s) - 1)
end
function b64.decodeblock(s1, s2, s3, s4)
local b1, b2, b3, len
len = s3 == "=" and 1 or s4 == "=" and 2 or 3
s3 = s3 == "=" and "A" or s3
s4 = s4 == "=" and "A" or s4
s1 = stri(s1)
s2 = stri(s2)
s3 = stri(s3)
s4 = stri(s4)
b1 = bin.bor(bin.lshift(s1, 2), bin.rshift(s2, 4))
b2 = bin.bor(bin.band(bin.lshift(s2, 4), 255), bin.rshift(s3, 2))
b3 = bin.bor(bin.band(bin.lshift(s3, 6), 240), s4)
return {b1, b2, b3}, len
end
function b64.decode(str_in)
local s_len = string.len(str_in) / 4
local out, len, i, j, t_out, s1, s2, s3, s4, t_len = {}, 0
for i = 1, s_len do
s1 = string.sub(str_in, i * 4 - 3, i * 4 - 3)
s2 = string.sub(str_in, i * 4 - 2, i * 4 - 2)
s3 = string.sub(str_in, i * 4 - 1, i * 4 - 1)
s4 = string.sub(str_in, i * 4 - 0, i * 4 - 0)
t_out, t_len = b64.decodeblock(s1, s2, s3, s4)
for j = 1, t_len do
out[i * 3 - 3 + j] = t_out[j]
end
len = len + t_len
end
return out, len
end
b64_test_in = {
48, 49, 50, 51, 52, 53, 54, 55, 56, 57
}
b64_test_enc = "MDEyMzQ1Njc4OQ=="
function test_b64()
local enc, dec, i, len
enc = b64.encode(b64_test_in, 10)
assert(enc == b64_test_enc)
dec, len = b64.decode(enc)
assert(len == 10)
for i = 1, len do
assert(b64_test_in[i] == dec[i])
end
end
test_b64()
print(b64.encode(b64_test_in, 10))
sexta-feira, 14 de novembro de 2008
Número de cartões de crédito para testes
Abaixo alguns número de cartões de crédito para testes em sistemas:
Credit Card | Test Number |
---|---|
Visa | 4111 1111 1111 1111 |
MasterCard | 5500 0000 0000 0004 5424 0000 0000 0015 |
American Express | 3782 8224 6310 005 3400 0000 0000 009 3700 0000 0000 002 |
Discover | 6011 1111 1111 1117 6011 0000 0000 0004 6011 0000 0000 0012 |
Diner's Club / Carte Blanche | 3000 0000 0000 04 |
en Route | 2014 0000 0000 009 |
JCB | 3088 0000 0000 0009 |
Special SendSafe Test Visa number | 0111-1111-1111-1111 |
terça-feira, 11 de novembro de 2008
Instalando LuaSocket e LuaSQL
Para instalar o LuaSocket ou o LuaSQL no fedora,
abra uma conexão SSH como root e digite no console:
# yum install lua-sql
# yum install lua-socket
Depois confirme os pacotes e aguarde a instalação.
abra uma conexão SSH como root e digite no console:
# yum install lua-sql
# yum install lua-socket
Depois confirme os pacotes e aguarde a instalação.
segunda-feira, 3 de novembro de 2008
Date para String em java
// Date para String em java.
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date today = new Date();
String stringDate = df.format(today);
System.out.println("Data em String: " + stringDate);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date today = new Date();
String stringDate = df.format(today);
System.out.println("Data em String: " + stringDate);
Criptografia MD5 em Lua
-- Implementação da Criptografia MD5 em Lua
local bin = { }
function bin.imod(a, b)
return a - math.floor(a / b) * b
end
function bin.rshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a / (2 ^ b))
end
function bin.lshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a * (2 ^ b))
end
function bin.band(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) and (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) or (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bxor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1 ~= b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bnot(a)
local i, v, r, b
if (a < 0) then
a = 4294967296 + a
end
a = bin.imod(a, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b = a >= v
if (b) then
a = a - v
else
r = r + v
end
end
return r
end
local X
local md5={ff=tonumber('ffffffff',16),consts={}}
string.gsub([[
d76aa478 e8c7b756 242070db c1bdceee
f57c0faf 4787c62a a8304613 fd469501
698098d8 8b44f7af ffff5bb1 895cd7be
6b901122 fd987193 a679438e 49b40821
f61e2562 c040b340 265e5a51 e9b6c7aa
d62f105d 02441453 d8a1e681 e7d3fbc8
21e1cde6 c33707d6 f4d50d87 455a14ed
a9e3e905 fcefa3f8 676f02d9 8d2a4c8a
fffa3942 8771f681 6d9d6122 fde5380c
a4beea44 4bdecfa9 f6bb4b60 bebfbc70
289b7ec6 eaa127fa d4ef3085 04881d05
d9d4d039 e6db99e5 1fa27cf8 c4ac5665
f4292244 432aff97 ab9423a7 fc93a039
655b59c3 8f0ccc92 ffeff47d 85845dd1
6fa87e4f fe2ce6e0 a3014314 4e0811a1
f7537e82 bd3af235 2ad7d2bb eb86d391
67452301 efcdab89 98badcfe 10325476 ]],
'(%w+)', function (s) table.insert(md5.consts,tonumber(s,16)) end)
function md5.transform(A,B,C,D)
local f=function (x,y,z) return bin.bor(bin.band(x,y),bin.band(-x-1,z)) end
local g=function (x,y,z) return bin.bor(bin.band(x,z),bin.band(y,-z-1)) end
local h=function (x,y,z) return bin.bxor(x,bin.bxor(y,z)) end
local i=function (x,y,z) return bin.bxor(y,bin.bor(x,-z-1)) end
local z=function (f,a,b,c,d,x,s,ac)
a=bin.band(a+f(b,c,d)+x+ac,md5.ff)
-- be *very* careful that left shift does not cause rounding!
return bin.bor(bin.lshift(bin.band(a,bin.rshift(md5.ff,s)),s),bin.rshift(a,32-s))+b
end
local a,b,c,d=A,B,C,D
local t=md5.consts
a=z(f,a,b,c,d,X[ 0], 7,t[ 1])
d=z(f,d,a,b,c,X[ 1],12,t[ 2])
c=z(f,c,d,a,b,X[ 2],17,t[ 3])
b=z(f,b,c,d,a,X[ 3],22,t[ 4])
a=z(f,a,b,c,d,X[ 4], 7,t[ 5])
d=z(f,d,a,b,c,X[ 5],12,t[ 6])
c=z(f,c,d,a,b,X[ 6],17,t[ 7])
b=z(f,b,c,d,a,X[ 7],22,t[ 8])
a=z(f,a,b,c,d,X[ 8], 7,t[ 9])
d=z(f,d,a,b,c,X[ 9],12,t[10])
c=z(f,c,d,a,b,X[10],17,t[11])
b=z(f,b,c,d,a,X[11],22,t[12])
a=z(f,a,b,c,d,X[12], 7,t[13])
d=z(f,d,a,b,c,X[13],12,t[14])
c=z(f,c,d,a,b,X[14],17,t[15])
b=z(f,b,c,d,a,X[15],22,t[16])
a=z(g,a,b,c,d,X[ 1], 5,t[17])
d=z(g,d,a,b,c,X[ 6], 9,t[18])
c=z(g,c,d,a,b,X[11],14,t[19])
b=z(g,b,c,d,a,X[ 0],20,t[20])
a=z(g,a,b,c,d,X[ 5], 5,t[21])
d=z(g,d,a,b,c,X[10], 9,t[22])
c=z(g,c,d,a,b,X[15],14,t[23])
b=z(g,b,c,d,a,X[ 4],20,t[24])
a=z(g,a,b,c,d,X[ 9], 5,t[25])
d=z(g,d,a,b,c,X[14], 9,t[26])
c=z(g,c,d,a,b,X[ 3],14,t[27])
b=z(g,b,c,d,a,X[ 8],20,t[28])
a=z(g,a,b,c,d,X[13], 5,t[29])
d=z(g,d,a,b,c,X[ 2], 9,t[30])
c=z(g,c,d,a,b,X[ 7],14,t[31])
b=z(g,b,c,d,a,X[12],20,t[32])
a=z(h,a,b,c,d,X[ 5], 4,t[33])
d=z(h,d,a,b,c,X[ 8],11,t[34])
c=z(h,c,d,a,b,X[11],16,t[35])
b=z(h,b,c,d,a,X[14],23,t[36])
a=z(h,a,b,c,d,X[ 1], 4,t[37])
d=z(h,d,a,b,c,X[ 4],11,t[38])
c=z(h,c,d,a,b,X[ 7],16,t[39])
b=z(h,b,c,d,a,X[10],23,t[40])
a=z(h,a,b,c,d,X[13], 4,t[41])
d=z(h,d,a,b,c,X[ 0],11,t[42])
c=z(h,c,d,a,b,X[ 3],16,t[43])
b=z(h,b,c,d,a,X[ 6],23,t[44])
a=z(h,a,b,c,d,X[ 9], 4,t[45])
d=z(h,d,a,b,c,X[12],11,t[46])
c=z(h,c,d,a,b,X[15],16,t[47])
b=z(h,b,c,d,a,X[ 2],23,t[48])
a=z(i,a,b,c,d,X[ 0], 6,t[49])
d=z(i,d,a,b,c,X[ 7],10,t[50])
c=z(i,c,d,a,b,X[14],15,t[51])
b=z(i,b,c,d,a,X[ 5],21,t[52])
a=z(i,a,b,c,d,X[12], 6,t[53])
d=z(i,d,a,b,c,X[ 3],10,t[54])
c=z(i,c,d,a,b,X[10],15,t[55])
b=z(i,b,c,d,a,X[ 1],21,t[56])
a=z(i,a,b,c,d,X[ 8], 6,t[57])
d=z(i,d,a,b,c,X[15],10,t[58])
c=z(i,c,d,a,b,X[ 6],15,t[59])
b=z(i,b,c,d,a,X[13],21,t[60])
a=z(i,a,b,c,d,X[ 4], 6,t[61])
d=z(i,d,a,b,c,X[11],10,t[62])
c=z(i,c,d,a,b,X[ 2],15,t[63])
b=z(i,b,c,d,a,X[ 9],21,t[64])
return A+a,B+b,C+c,D+d
end
function md5.Calc(s)
local msgLen=string.len(s)
local padLen=56-bin.imod(msgLen,64)
if bin.imod(msgLen,64)>56 then padLen=padLen+64 end
if padLen==0 then padLen=64 end
s=s..string.char(128)..string.rep(string.char(0),padLen-1)
s=s..leIstr(8*msgLen)..leIstr(0)
assert(bin.imod(string.len(s),64)==0)
local t=md5.consts
local a,b,c,d=t[65],t[66],t[67],t[68]
for i=1,string.len(s),64 do
X=leStrCuts(string.sub(s,i,i+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
assert(table.getn(X)==16)
X[0]=table.remove(X,1) -- zero based!
a,b,c,d=md5.transform(a,b,c,d)
end
local swap=function (w) return beInt(leIstr(w)) end
return string.format("%08x%08x%08x%08x",swap(a),swap(b),swap(c),swap(d))
end
-- convert little-endian 32-bit int to a 4-char string
function leIstr(i)
local f=function (s) return string.char(bin.band(bin.rshift(i,s),255)) end
return f(0)..f(8)..f(16)..f(24)
end
-- convert raw string to big-endian int
function beInt(s)
local v=0
for i=1,string.len(s) do v=v*256+string.byte(s,i) end
return v
end
-- convert raw string to little-endian int
function leInt(s)
local v=0
for i=string.len(s),1,-1 do v=v*256+string.byte(s,i) end
return v
end
-- cut up a string in little-endian ints of given size
function leStrCuts(s,...)
local o,r=1,{}
for i=1,table.getn(arg) do
table.insert(r,leInt(string.sub(s,o,o+arg[i]-1)))
o=o+arg[i]
end
return r
end
function md5.dochecks()
s0='message digest'
s1='abcdefghijklmnopqrstuvwxyz'
s2='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
s3='1234567890123456789012345678901234567890'
..'1234567890123456789012345678901234567890'
assert(md5.Calc('')=='d41d8cd98f00b204e9800998ecf8427e')
assert(md5.Calc('a')=='0cc175b9c0f1b6a831c399e269772661')
assert(md5.Calc('abc')=='900150983cd24fb0d6963f7d28e17f72')
assert(md5.Calc(s0)=='f96b697d7cb7938d525a2f31aaf161d0')
assert(md5.Calc(s1)=='c3fcd3d76192e4007dfb496cca67e13b')
assert(md5.Calc(s2)=='d174ab98d277d9f5a5611c2c9f419d9f')
assert(md5.Calc(s3)=='57edf4a22be3c955ac49da2e2107b67a')
end
--md5.dochecks()
--print(md5.Calc('abc')) --900150983cd24fb0d6963f7d28e17f72
--print(md5.Calc('luis')) --502ff82f7f1f8218dd41201fe4353687
local bin = { }
function bin.imod(a, b)
return a - math.floor(a / b) * b
end
function bin.rshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a / (2 ^ b))
end
function bin.lshift(a, b)
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
return math.floor(a * (2 ^ b))
end
function bin.band(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) and (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1) or (b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bxor(a, b)
local i, v, r, b1, b2
if (a < 0) then
a = 4294967296 + a
end
if (b < 0) then
b = 4294967296 + b
end
a = bin.imod(a, 4294967296)
b = bin.imod(b, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b1 = a >= v
b2 = b >= v
if (b1 ~= b2) then
r = r + v
end
if (b1) then
a = a - v
end
if (b2) then
b = b - v
end
end
return r
end
function bin.bnot(a)
local i, v, r, b
if (a < 0) then
a = 4294967296 + a
end
a = bin.imod(a, 4294967296)
r = 0
for i = 31, 0, -1 do
v = 2 ^ i
b = a >= v
if (b) then
a = a - v
else
r = r + v
end
end
return r
end
local X
local md5={ff=tonumber('ffffffff',16),consts={}}
string.gsub([[
d76aa478 e8c7b756 242070db c1bdceee
f57c0faf 4787c62a a8304613 fd469501
698098d8 8b44f7af ffff5bb1 895cd7be
6b901122 fd987193 a679438e 49b40821
f61e2562 c040b340 265e5a51 e9b6c7aa
d62f105d 02441453 d8a1e681 e7d3fbc8
21e1cde6 c33707d6 f4d50d87 455a14ed
a9e3e905 fcefa3f8 676f02d9 8d2a4c8a
fffa3942 8771f681 6d9d6122 fde5380c
a4beea44 4bdecfa9 f6bb4b60 bebfbc70
289b7ec6 eaa127fa d4ef3085 04881d05
d9d4d039 e6db99e5 1fa27cf8 c4ac5665
f4292244 432aff97 ab9423a7 fc93a039
655b59c3 8f0ccc92 ffeff47d 85845dd1
6fa87e4f fe2ce6e0 a3014314 4e0811a1
f7537e82 bd3af235 2ad7d2bb eb86d391
67452301 efcdab89 98badcfe 10325476 ]],
'(%w+)', function (s) table.insert(md5.consts,tonumber(s,16)) end)
function md5.transform(A,B,C,D)
local f=function (x,y,z) return bin.bor(bin.band(x,y),bin.band(-x-1,z)) end
local g=function (x,y,z) return bin.bor(bin.band(x,z),bin.band(y,-z-1)) end
local h=function (x,y,z) return bin.bxor(x,bin.bxor(y,z)) end
local i=function (x,y,z) return bin.bxor(y,bin.bor(x,-z-1)) end
local z=function (f,a,b,c,d,x,s,ac)
a=bin.band(a+f(b,c,d)+x+ac,md5.ff)
-- be *very* careful that left shift does not cause rounding!
return bin.bor(bin.lshift(bin.band(a,bin.rshift(md5.ff,s)),s),bin.rshift(a,32-s))+b
end
local a,b,c,d=A,B,C,D
local t=md5.consts
a=z(f,a,b,c,d,X[ 0], 7,t[ 1])
d=z(f,d,a,b,c,X[ 1],12,t[ 2])
c=z(f,c,d,a,b,X[ 2],17,t[ 3])
b=z(f,b,c,d,a,X[ 3],22,t[ 4])
a=z(f,a,b,c,d,X[ 4], 7,t[ 5])
d=z(f,d,a,b,c,X[ 5],12,t[ 6])
c=z(f,c,d,a,b,X[ 6],17,t[ 7])
b=z(f,b,c,d,a,X[ 7],22,t[ 8])
a=z(f,a,b,c,d,X[ 8], 7,t[ 9])
d=z(f,d,a,b,c,X[ 9],12,t[10])
c=z(f,c,d,a,b,X[10],17,t[11])
b=z(f,b,c,d,a,X[11],22,t[12])
a=z(f,a,b,c,d,X[12], 7,t[13])
d=z(f,d,a,b,c,X[13],12,t[14])
c=z(f,c,d,a,b,X[14],17,t[15])
b=z(f,b,c,d,a,X[15],22,t[16])
a=z(g,a,b,c,d,X[ 1], 5,t[17])
d=z(g,d,a,b,c,X[ 6], 9,t[18])
c=z(g,c,d,a,b,X[11],14,t[19])
b=z(g,b,c,d,a,X[ 0],20,t[20])
a=z(g,a,b,c,d,X[ 5], 5,t[21])
d=z(g,d,a,b,c,X[10], 9,t[22])
c=z(g,c,d,a,b,X[15],14,t[23])
b=z(g,b,c,d,a,X[ 4],20,t[24])
a=z(g,a,b,c,d,X[ 9], 5,t[25])
d=z(g,d,a,b,c,X[14], 9,t[26])
c=z(g,c,d,a,b,X[ 3],14,t[27])
b=z(g,b,c,d,a,X[ 8],20,t[28])
a=z(g,a,b,c,d,X[13], 5,t[29])
d=z(g,d,a,b,c,X[ 2], 9,t[30])
c=z(g,c,d,a,b,X[ 7],14,t[31])
b=z(g,b,c,d,a,X[12],20,t[32])
a=z(h,a,b,c,d,X[ 5], 4,t[33])
d=z(h,d,a,b,c,X[ 8],11,t[34])
c=z(h,c,d,a,b,X[11],16,t[35])
b=z(h,b,c,d,a,X[14],23,t[36])
a=z(h,a,b,c,d,X[ 1], 4,t[37])
d=z(h,d,a,b,c,X[ 4],11,t[38])
c=z(h,c,d,a,b,X[ 7],16,t[39])
b=z(h,b,c,d,a,X[10],23,t[40])
a=z(h,a,b,c,d,X[13], 4,t[41])
d=z(h,d,a,b,c,X[ 0],11,t[42])
c=z(h,c,d,a,b,X[ 3],16,t[43])
b=z(h,b,c,d,a,X[ 6],23,t[44])
a=z(h,a,b,c,d,X[ 9], 4,t[45])
d=z(h,d,a,b,c,X[12],11,t[46])
c=z(h,c,d,a,b,X[15],16,t[47])
b=z(h,b,c,d,a,X[ 2],23,t[48])
a=z(i,a,b,c,d,X[ 0], 6,t[49])
d=z(i,d,a,b,c,X[ 7],10,t[50])
c=z(i,c,d,a,b,X[14],15,t[51])
b=z(i,b,c,d,a,X[ 5],21,t[52])
a=z(i,a,b,c,d,X[12], 6,t[53])
d=z(i,d,a,b,c,X[ 3],10,t[54])
c=z(i,c,d,a,b,X[10],15,t[55])
b=z(i,b,c,d,a,X[ 1],21,t[56])
a=z(i,a,b,c,d,X[ 8], 6,t[57])
d=z(i,d,a,b,c,X[15],10,t[58])
c=z(i,c,d,a,b,X[ 6],15,t[59])
b=z(i,b,c,d,a,X[13],21,t[60])
a=z(i,a,b,c,d,X[ 4], 6,t[61])
d=z(i,d,a,b,c,X[11],10,t[62])
c=z(i,c,d,a,b,X[ 2],15,t[63])
b=z(i,b,c,d,a,X[ 9],21,t[64])
return A+a,B+b,C+c,D+d
end
function md5.Calc(s)
local msgLen=string.len(s)
local padLen=56-bin.imod(msgLen,64)
if bin.imod(msgLen,64)>56 then padLen=padLen+64 end
if padLen==0 then padLen=64 end
s=s..string.char(128)..string.rep(string.char(0),padLen-1)
s=s..leIstr(8*msgLen)..leIstr(0)
assert(bin.imod(string.len(s),64)==0)
local t=md5.consts
local a,b,c,d=t[65],t[66],t[67],t[68]
for i=1,string.len(s),64 do
X=leStrCuts(string.sub(s,i,i+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
assert(table.getn(X)==16)
X[0]=table.remove(X,1) -- zero based!
a,b,c,d=md5.transform(a,b,c,d)
end
local swap=function (w) return beInt(leIstr(w)) end
return string.format("%08x%08x%08x%08x",swap(a),swap(b),swap(c),swap(d))
end
-- convert little-endian 32-bit int to a 4-char string
function leIstr(i)
local f=function (s) return string.char(bin.band(bin.rshift(i,s),255)) end
return f(0)..f(8)..f(16)..f(24)
end
-- convert raw string to big-endian int
function beInt(s)
local v=0
for i=1,string.len(s) do v=v*256+string.byte(s,i) end
return v
end
-- convert raw string to little-endian int
function leInt(s)
local v=0
for i=string.len(s),1,-1 do v=v*256+string.byte(s,i) end
return v
end
-- cut up a string in little-endian ints of given size
function leStrCuts(s,...)
local o,r=1,{}
for i=1,table.getn(arg) do
table.insert(r,leInt(string.sub(s,o,o+arg[i]-1)))
o=o+arg[i]
end
return r
end
function md5.dochecks()
s0='message digest'
s1='abcdefghijklmnopqrstuvwxyz'
s2='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
s3='1234567890123456789012345678901234567890'
..'1234567890123456789012345678901234567890'
assert(md5.Calc('')=='d41d8cd98f00b204e9800998ecf8427e')
assert(md5.Calc('a')=='0cc175b9c0f1b6a831c399e269772661')
assert(md5.Calc('abc')=='900150983cd24fb0d6963f7d28e17f72')
assert(md5.Calc(s0)=='f96b697d7cb7938d525a2f31aaf161d0')
assert(md5.Calc(s1)=='c3fcd3d76192e4007dfb496cca67e13b')
assert(md5.Calc(s2)=='d174ab98d277d9f5a5611c2c9f419d9f')
assert(md5.Calc(s3)=='57edf4a22be3c955ac49da2e2107b67a')
end
--md5.dochecks()
--print(md5.Calc('abc')) --900150983cd24fb0d6963f7d28e17f72
--print(md5.Calc('luis')) --502ff82f7f1f8218dd41201fe4353687
Convertendo java.util.Date para java.util.Calendar
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date.getTime());
// Separando em dia, mês e ano.
int ano = calendar.get(Calendar.YEAR);
int mes = calendar.get(Calendar.MONTH)+1;
int dia = calendar.get(Calendar.DAY_OF_MONTH);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date.getTime());
// Separando em dia, mês e ano.
int ano = calendar.get(Calendar.YEAR);
int mes = calendar.get(Calendar.MONTH)+1;
int dia = calendar.get(Calendar.DAY_OF_MONTH);
Assinar:
Postagens (Atom)