terça-feira, 16 de dezembro de 2008
Convertendo de long para String binária em java
// tipo long em java, use o código abaixo:
long x = "10"
String str = Long.toString(x, 2);
System.out.println(str);
// O mesmo código pode ser usado para inteiro.
quinta-feira, 4 de dezembro de 2008
Convertendo String Binária Para Inteiro em C#
// uma string e devolve o inteiro correspondente.
// Exemplo:
// string str = "00001001";
// metodo retorna 9
public int ToDecimal(string bin)
{
long l = Convert.ToInt64(bin,2);
int i = (int)l;
return i;
}
segunda-feira, 1 de dezembro de 2008
Como funciona o SSL
Digamos que uma mensagem é transmitida de A para B. Neste caso A usa a chave pública de B para criptografar a mensagem, tornando B a única pessoa que pode decodificar a mensagem, usando a sua chave privada. Nós não podemos entretanto ter certeza quanto a identidade de A.
Para resolver este problema utiliza-se os certificados digitais. O certificado é assinado usando a chave privada do emissor do certificado. Certificados são um meio padrão de ligar uma chave pública a um nome.
Por meio dessa tecnologia de certificado, todos podem examinar o certificado de A para ver se está sendo forjado. Assumindo que A tenha rígido controle sobre sua chave privada, e que seja realmente A quem obteve o certificado, então tudo está bem.
Referências:
www.gta.ufrj.br/grad/00_2/ssl/ssl.htm
publib.boulder.ibm.com/tividd/td/TRM/GC32-1323-00/pt_BR/HTML/admin231.htm
sábado, 29 de novembro de 2008
Software para Controle de Vendas e Estoque
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
terça-feira, 25 de novembro de 2008
Exemplo de gráfico de barras com 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
Instalando e configurando o Archiva no Tomcat
- 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
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
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
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
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
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
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);
quarta-feira, 29 de outubro de 2008
Crivo de Eratóstenes em Lua
--O Crivo de Eratóstenes é um método simples de se achar
--os números primos em um intervalo de 1 a n.
--Ele consiste em montar uma tabela com os números que serão
--testados, e iterar do 2º ao n-ézimo elemento, invalidando
--todos os números da tabela que são divisíveis pelo contador
--da iteração (e que também são diferentes do contador).
--Abaixo segue uma implementação em linguagem Lua
function geraNumeros(n)
local arr = {}
for i = 1, n do
arr[i] = true
end
return arr
end
-- Deixa como true os índices primos
function filtraPrimos(arr)
local count = #arr
for c = 2, count do
if(arr[c]) then
for i = c + c, count, c do
arr[i] = false
end
end
end
return arr
end
local arr = geraNumeros(99999)
arr = filtraPrimos(arr)
-- Imprime os números primos de 1 a n
table.foreach(arr, function(i,v) if v then print(i) end end)
--FONTE: http://kknd.wordpress.com/
sexta-feira, 24 de outubro de 2008
Formatos de imagens
Abaixo segue uma relação de informações sobre alguns formatos de imagens. Dos formatos apresentados abaixo o jpeg e o png talvez sejam os que apresentam as maiores vantagens, mas cada situação exige um formato que atende melhor as necessidades (tamanho, qualidade, etc).
JPEG
Seu nome vem do grupo que definiu o formato, Join Photographic Experts Group. Normalmente este tipo de arquivo tem a extensão jpg. O arquivo é comprimido e codificado com todas as cores, assim este formato é eficiente para fotografias e outras imagens que possuem muitas cores.
A desvantagem é que ele usa um tipo de compressão que provoca uma perda de qualidade a cada modificação do arquivo e regravação no disco. Isto é conhecido como lossy. Então, não use JPEG se você pretende editar o arquivo várias vezes. Esta perda de qualidade não acontece quando você apenas copia o arquivo de um lugar para o outro, só quando há alguma modificação a nível de edição do arquivo.
GIF
O GIF, Graphics Interchange Format, é um formato indexado. Isto significa que ele usa uma lista de cores em vez de codificar cada cor separadamente. Este formato é muito eficiente para imagens com poucas cores, como o logotipo de uma empresa com apenas cinco cores.
GIF pode representar no máximo 256 cores. Como 256 é igual a 2 elevado a 8, este tipo de imagem também é conhecido como 8-bit color. Normalemente as fotografias tem muito mais que 256 cores, assim salvar uma fotografica como GIF produzirá um arquivo com baixa qualidade. Apesar disso o arquivo GIF ficará muito maior que a versão JPEG da mesma imagem. Conclusão: não use GIF para fotos, apenas para ícones e logotipos.
O formato GIF oferece dois recursos úteis: transparência e animação. Com a transparência você pode criar um ícone cujo fundo é completamente transparente e isto é útil em páginas web ou em botões de interfaces gráficas. GIF não trabalha com transparência parcial; o pixel é completamente transparente ou completamente opaco.
O recurso da animação permite a criação de GIFs animados, que são muito usados em páginas web.
PNG
Pronunciado "ping", seu nome vem de PNG's Not Gif (PNG não é GIF), embora hoje em dia também usem Portable Network Graphics como significado da sigla. É um formato relativamente novo cuja intenção inicial era ser um substituto do GIF devido a problemas legais, normalmente de copyright do formato GIF.
PNG pode ser usado para imagens com muitas cores, como JPEG, ou com imagens indexadas, como GIF. Quando trabalhando com imagens com muitas cores ele não é tão eficiente quanto o JPEG; a versão PNG de uma imagem será bem maior que sua versão JPEG. Porém PNG não trabalha com lossy: se você editar um arquivo PNG e salvá-lo, a qualidade será a mesma. Isto torna o formato PNG ideal para guardar imagens com muitas cores que serão editadas posteriormente.
Imagens PNG indexadas com poucas cores, como ícones e logotipos, são tão boas ou até melhores que as versões GIF e podem suportar mais que 256 cores. A maioria dos navegadores suportam PNG, assim é seguro usar imagens PNG em suas páginas de internet. PNG suporta transparência, inclusive transparência parcial. Assim, você pode criar áreas translúcidas. Porém, alguns navegadores não suportam a transparência PNG, neste caso suas imagens podem não ser exibidas corretamente.
PNG não suporta animação. Existe um formato chamado MNG que adiciona animação a uma imagem PNG mas, ainda não é suportado por nenhum navegador. Para imagens animadas, GIF ainda é a melhor opção.
XCF
Este é o formato do GIMP (um eficiente progama para manipulação de imagens). Quando você estiver editando uma imagem com muitas camadas (layers) e configurações, este é o formato ideal a ser usado. Arquivos XCF são muito grandes e só podem ser lidos pelo GIMP. Você pode comprimir os arquivo usando o GZIP ou o BZIP2 (arquivo.xcf.gz ou arquivo.xcf.bz2) e o GIMP manipulará a compressão quando ler ou gravar o arquivo.
TIFF
A sigla vem de Tagged Image File Format e sua extensão pode ser .tif ou .tiff. Este é outro formato a ser usado com imagens de muitas cores. Ele também não trabalha com lossy. Como o PNG, este formato não produz arquivos tão pequenos mas, pode ser usado para guardar imagens que serão editadas futuramente. Não use este tipo de arquivo em páginas web, pois muitos navegadores podem não exibir corretamente. Apesar da semelhança com o formato PNG, o formato TIFF não possui um padrão único, mas sim diferentes padrões com diferentes interpretações. Isto significa que um arquivo TIFF escrito por um programa pode não ser lido em outro. Por isso é altemente recomendado o uso de PNG em vez de TIFF.
Uma vantagem do TIFF é que ele manipula um maior número de cores (16 bits para cada canal de cor). Isto é importante para alguns profissionais como designers e artistas gráficos.
RAW
Não necessariamente um formato, RAW é um termo que abrange todos os formatos usados por fabricantes de câmeras. O suporte a alguns destes formatos acontece através do uso de plug-ins; outros são mantidos "em segredo" pelos fabricantes. Neste último caso, sua única opção é usar algum programa para converter a imagem antes de editá-la.
BMP
Este é o formato de bitmap da Microsoft. Arquivos BMP são muito grandes e não apresentam nenhuma vantagem em comparação com os formatos PNG ou TIFF. Salve em BMP se realmente for necessário, como por exemplo ao criar um ícone para o Windows. Caso contrário é melhor escolher outro formato.
PCD
Este é o formato proprietário Photo CD da Kodac. Ele inclui muitas resoluções dentro de um arquivo e por isso os arquivos tendem a ser muito grandes. Existe plug-in para ler arquivos PCD, mas uma melhor opção é converter o arquivo PCD para outro formato.
PSD
Este é o formato proprietário Photoshop da Adobe. Ele salva camadas e outras informações da mesma maneira que o XCF faz no GIMP. Na verdade existem dois formatos PSD, a versão mais nova é um padrão fechado que não pode ser lido por qualquer outro programa além do próprio Photoshop.
ICO
Este é o formato para ícones do Windows. Ele pode conter várias resoluções num arquivo. Este formato é útil não só para ícones do Windows, mas também para criar favicons para seu site web. Este tipo de ícone é aquele mostrado à esquerda do endereço do seu site na barra de endereços do navegador ou à esquerda do nome do site quando este é adicionado aos favoritos. A exibição do favicon depende do navegador. Nem todos os exibem o favicon nas duas posições.
PDF e PostScript
Estes são formatos gráficos vetoriais e não rasterizados (que utilizam pixels) como os outros formatos abordados até agora. Em vez de representar a imagem como uma coleção de pixels, utilizam uma imagem vetorial, que é uma coleção de instruções de desenho envolvendo pontos, linhas e curvas. Se você planeja salvar sua imagem como PostScrip ou PDF é melhor usar um programa que edite imagens vetoriais.
SVG
A sigla vem de Scalable Vector Graphics. Este formato vem crescendo em popularidade na web.
Para manipulação de imagens recomento o GIMP (GNU Image Manipulation Program) que é um software livre, possui versões para windows e linux, e é compátivel com vários formatos de imagens.
quarta-feira, 22 de outubro de 2008
Desafio Lógico 01
Qual é o sexto número?
1, 2, 6, 42, 1806, ___ ???
a) 7886145
b) 194873
c) 1809
d) 3263442
e) 201349
...
Resposta:
Resolução 1:
Faz-se a multiplicação do número anterior(1806) por ele mesmo acrescido de um(1), ou seja: 1806* (1806+1). Resultado: 1806*1807 = 3263442, alternativa d.
Resolução 2:
Eleva-se o número ao quadrado e soma com ele mesmo: 1806*1806+1806. Resultado: 3263442, alternativa d.
sexta-feira, 10 de outubro de 2008
Tutorial Lua - Programa exemplo
local Pessoa = {nome = 'João', idade = 30, nacionalidade = 'brasileira'}
-- Construtor de Pessoa.
function Pessoa:new(pessoa)
pessoa = pessoa or {}
pessoa.nome = pessoa.nome or self.nome
pessoa.idade = pessoa.idade or self.idade
pessoa.nacionalidade = pessoa.nacionalidade or self.nacionalidade
setmetatable(pessoa, self) ; self.__index = self
return pessoa
end
-- Criando dois objetos de Pessoa usando o construtor,
-- o primeiro sem passagem de parametro para o construtor
-- e o segundo com passagem de parâmetros.
local cliente = Pessoa:new()
local fornecedor = Pessoa:new{nome = 'Luis', idade = 21}
-- Criando um objeto similar mas sem usar a classe.
local funcionario = {nome = 'Robert', nacionalidade = 'americana',
idade = 42, cargo = 'gerente',
filho = {
{nome = 'Fernando', idade = 18, nacionalidade = 'mexicana'},
{nome = 'Mônica', idade = 13, nacionalidade = 'japonesa'}
}
}
-- Criando um cachorro, nao e uma pessoa mas possui
-- alguns atributos iguais.
local cachorro = {dono = 'Fernando', nome = 'Rex', idade = '5',
nacionalidade = 'brasileira'}
-- Tabela sociedade vai armazenar todas as pessoas e o cachorro.
local sociedade = {fornecedor, funcionario, cliente, funcionario.filho[1],
funcionario.filho[2], cachorro}
-- Imprime dados dos objetos(tabelas) criados. Observe que
-- este metodo tambem e usado para apresentar as informacoes
-- do cachorro, que apesar de nao ser uma pessoa, possui
-- todos os atributos tratados neste metodo.
function showPessoa(pessoa)
print('--------------------------------------')
print('Nome: '..pessoa.nome)
print('Idade: '..pessoa.idade)
print('Nacionalidade: '..pessoa.nacionalidade)
end
function initialize() -- Varre a tabela sociedade.
for i=1, table.getn(sociedade), 1 do
showPessoa(sociedade[i])
end
end
initialize() -- Inicia a aplicação.
-- Lua e uma linguagem orientada a tabelas. Tabela e o termo
-- mais correto para os “objetos” criados nesta aplicação.
-- Todas as informacoes em uma tabela sao indexadas e
-- facilmente manipuladas.
segunda-feira, 22 de setembro de 2008
Convertendo String para Date em java
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Data {
public static void main(String[] args) {
DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
Date data = null;
try {
data = new Date(fmt.parse("05/08/1987").getTime());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(data);
}
}
sexta-feira, 12 de setembro de 2008
Validando cartão de crédito em java
import java.io.InputStreamReader;
public class CCUtils {
public static final int INVALID = -1;
public static final int VISA = 0;
public static final int MASTERCARD = 1;
public static final int AMERICAN_EXPRESS = 2;
public static final int EN_ROUTE = 3;
public static final int DINERS_CLUB = 4;
private static final String [] cardNames =
{ "Visa" ,
"Mastercard",
"American Express",
"En Route",
"Diner's CLub/Carte Blanche",
};
/**
* Valid a Credit Card number
*/
public static boolean validCC(String number)
throws Exception {
int CardID;
if ( (CardID = getCardID(number)) != -1)
return validCCNumber(number);
return false;
}
/**
* Get the Card type
* returns the credit card type
* INVALID = -1;
* VISA = 0;
* MASTERCARD = 1;
* AMERICAN_EXPRESS = 2;
* EN_ROUTE = 3;
* DINERS_CLUB = 4;
*/
public static int getCardID(String number) {
int valid = INVALID;
String digit1 = number.substring(0,1);
String digit2 = number.substring(0,2);
String digit3 = number.substring(0,3);
String digit4 = number.substring(0,4);
if (isNumber(number)) {
/* ----
** VISA prefix=4
** ---- length=13 or 16 (can be 15 too!?! maybe)
*/
if (digit1.equals("4")) {
if (number.length() == 13 || number.length() == 16)
valid = VISA;
}
/* ----------
** MASTERCARD prefix= 51 ... 55
** ---------- length= 16
*/
else if (digit2.compareTo("51")>=0 && digit2.compareTo("55")<=0) {
if (number.length() == 16)
valid = MASTERCARD;
}
/* ----
** AMEX prefix=34 or 37
** ---- length=15
*/
else if (digit2.equals("34") || digit2.equals("37")) {
if (number.length() == 15)
valid = AMERICAN_EXPRESS;
}
/* -----
** ENROU prefix=2014 or 2149
** ----- length=15
*/
else if (digit4.equals("2014") || digit4.equals("2149")) {
if (number.length() == 15)
valid = EN_ROUTE;
}
/* -----
** DCLUB prefix=300 ... 305 or 36 or 38
** ----- length=14
*/
else if (digit2.equals("36") || digit2.equals("38") ||
(digit3.compareTo("300")>=0 && digit3.compareTo("305")<=0)) {
if (number.length() == 14)
valid = DINERS_CLUB;
}
}
return valid;
/* ----
** DISCOVER card prefix = 60
** -------- lenght = 16
** left as an exercise ...
*/
}
public static boolean isNumber(String n) {
try {
double d = Double.valueOf(n).doubleValue();
return true;
}
catch (NumberFormatException e) {
e.printStackTrace();
return false;
}
}
public static String getCardName(int id) {
return (id > -1 && id < cardNames.length ? cardNames[id] : "");
}
public static boolean validCCNumber(String n) {
try {
/*
** known as the LUHN Formula (mod10)
*/
int j = n.length();
String [] s1 = new String[j];
for (int i=0; i < n.length(); i++) s1[i] = "" + n.charAt(i);
int checksum = 0;
for (int i=s1.length-1; i >= 0; i-= 2) {
int k = 0;
if (i > 0) {
k = Integer.valueOf(s1[i-1]).intValue() * 2;
if (k > 9) {
String s = "" + k;
k = Integer.valueOf(s.substring(0,1)).intValue() +
Integer.valueOf(s.substring(1)).intValue();
}
checksum += Integer.valueOf(s1[i]).intValue() + k;
}
else
checksum += Integer.valueOf(s1[0]).intValue();
}
return ((checksum % 10) == 0);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
/*
** For testing purpose
**
** java CCUtils [credit card number] or java CCUtils
**
*/
public static void main(String args[]) throws Exception {
String aCard = "";
if (args.length > 0)
aCard = args[0];
else {
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
System.out.print("Card number : ");
aCard = input.readLine();
}
if (getCardID(aCard) > -1) {
System.out.println("This card is supported.");
System.out.println("This a " + getCardName(getCardID(aCard)));
System.out.println
("The card number " + aCard + " is "
+ (validCC(aCard)?" good.":" bad."));
}
else
System.out.println("This card is invalid or unsupported!");
}
}
quarta-feira, 10 de setembro de 2008
Operação de módulo
Linguagem | Operador | O resultado tem o sinal do |
---|---|---|
Ada | mod | Divisor |
rem | Dividendo | |
ASP | Mod | Indefinido |
C (1989) | % | Indefinido |
C (1999) | % | Dividendo |
ColdFusion | MOD | Dividendo |
Common Lisp | mod | Divisor |
Eiffel | \\ | Dividendo |
Fortran | mod | Dividendo |
modulo | Divisor | |
J | |~ | Divisor |
Java | % | Dividendo |
JavaScript | % | Dividendo |
Lua | % | Divisor |
MATLAB | mod | Divisor |
rem | Dividendo | |
MySQL | MOD % | Dividendo |
Objective Caml | mod | Indefinido |
Pascal (Delphi) | mod | Dividendo |
Perl | % | Indefinido |
PHP | % | Dividendo |
PL/I | mod | Divisor (ANSI PL/I) |
Prolog (ISO 1995) | mod | Divisor |
Python | % | Divisor |
RPG | %REM | Dividendo |
Ruby | % | Divisor |
SenseTalk | modulo | Divisor |
rem | Dividendo | |
Verilog (2001) | % | Dividendo |
VHDL | mod | Divisor |
rem | Dividendo | |
Visual Basic | Mod | Dividendo |
Pegando o tamanho de uma String em Lua
Exemplo:
local str = 'stringTeste'
local tamanho = string.len(str)
print(tamanho)
Concatenando Strings em Lua
Exemplo:
local string1 = 'Hello '
local string2 = 'World'
local stringConcatenada = string1..string2
print(stringConcatenada)
terça-feira, 9 de setembro de 2008
A história do salário mínimo brasileiro
VIGÊNCIA | FUNDAMENTO LEGAL | VALOR |
04/07/40 | DL 2.162/40 | 240 mil réis |
01/01/43 | DL 5.670/43 | Cr$300,00 |
01/12/43 | DL 5.977/43 | Cr$380,00 |
01/01/52 | D 30.342/51 | Cr$1.200,00 |
04/07/54 | D 35.450/54 | Cr$2.400,00 |
01/08/56 | D 39.604/56 | Cr$3.800,00 |
01/01/59 | D 45.106-A/58 | Cr$6.000,00 |
18/10/60 | D 49.119-A/60 | Cr$9.600,00 |
16/10/61 | D 51.336/61 | Cr$13.440,00 |
01/01/63 | D 51.631/62 | Cr$21.000,00 |
24/02/64 | D 53.578/64 | Cr$42.000,00 |
01/02/65 | D 55.803/65 | CR$66.000,00 |
01/03/66 | D 57.900/66 | Cr$84.000,00 |
01/03/67 | D 60.231/67 | NCr$105,00 |
26/03/68 | D 62.461/68 | NCr$129,60 |
01/05/69 | D 64.442/69 | NCr$156,00 |
01/05/70 | D 66.523/70 | NCr$187.20 |
01/05/71 | D 68.576/71 | Cr$225,60 |
01/05/72 | D 70.465/72 | Cr$268,80 |
01/05/73 | D 72.148/73 | Cr$312,00 |
01/05/74 | D 73.995/74 | Cr$376,80 |
01/12/74 | Lei 6.147/74 | Cr$415,20 |
01/05/75 | D 75.679/75 | Cr$532,80 |
01/05/76 | D 77.510/76 | Cr$768,00 |
01/05/77 | D 79.610/77 | Cr$1.106,40 |
01/05/78 | D 81.615/78 | Cr$1.560,00 |
01/05/79 | D 84.135/79 | Cr$2.268,00 |
01/11/79 | D 84.135/79 | Cr$2.932,80 |
01/05/80 | D 84.674/80 | Cr$4.149,60 |
01/11/80 | D 85.310/80 | Cr$5.788,80 |
01/05/81 | D 85.950/81 | Cr$8.464,80 |
01/11/81 | D 86.514/81 | Cr$11.928,00 |
01/05/82 | D 87.139/82 | Cr$16.608,00 |
01/11/82 | D 87.743/82 | Cr$23.568,00 |
01/05/83 | D 88.267/83 | Cr$34.776,00 |
01/11/83 | D 88.930/83 | Cr$57.120,00 |
01/05/84 | D 89.589/84 | Cr$97.176,00 |
01/11/84 | D 90.301/84 | Cr$166.560,00 |
01/05/85 | D 91.213/85 | Cr$333.120,00 |
01/11/85 | D 91.861/85 | Cr$600.000,00 |
01/03/86 | DL 2.284/86 | Cz$804,00 |
01/01/87 | Portaria 3.019/87 | Cz$964,80 |
01/03/87 | D 94.062/87 | Czr1.368,00 |
01/05/87 | Portaria 3.149/87 | Cz$1.641,60 |
01/06/87 | Portaria 3.175/87 | Cz$1.969,92 |
10/08/87 | DL 2.351/87 | Cz$1.970,00 |
01/09/87 | D 94.815/87 | Cz$2.400,00 |
01/10/87 | D 94.989/87 | Cz$2.640,00 |
01/11/87 | D 95.092/87 | Cz$3.000,00 |
01/12/87 | D 95.307/87 | Cz$3.600,00 |
01/01/88 | D 95.479/87 | Cz$4.500,00 |
01/02/88 | D 95.686/88 | Cz$5.280,00 |
01/03/88 | D 95.758/88 | Cz$6.240,00 |
01/04/88 | D 95.884/88 | Cz$7.260,00 |
01/05/88 | D 95.987/88 | Cz$8.712,00 |
01/06/88 | D 96.107/88 | Cz$10.368,00 |
01/07/88 | D 96.235/88 | Cz$12.444,00 |
01/08/88 | D 96.442/88 | Cz$15.552,00 |
01/09/88 | D 96.625/88 | Cz$18.960,00 |
01/10/88 | D 96.857/88 | Cz$23.700,00 |
01/11/88 | D 97.024/88 | Cz$30.800,00 |
01/12/88 | D 97.151/88 | Cz$40.425,00 |
01/01/89 | D 97.385/88 | NCz$63,90 |
01/05/89 | D 97.696/89 | NCz$81,40 |
01/06/89 | Lei 7.789/89 | NCz$120,00 |
03/07/89 | D 97.915/89 | NCz$149,80 |
01/08/89 | D 98.003/89 | NCz$192,88 |
01/09/89 | D 98.108/89 | NCz$249,48 |
01/10/89 | D 98.211/89 | NCz$381,73 |
01/11/89 | D 98.346/89 | NCz$557,31 |
01/12/89 | D 98.456/89 | NCz$788,12 |
01/01/90 | D 98.783/89 | NCz$1.283,95 |
01/02/90 | D 98.900/90 | NCz$2.004,37 |
01/03/90 | D 98.985/90 | NCz$3.674,06 |
01/04/90 | Portaria 191-A/90 | Cr$3.674,06 |
01/05/90 | Portaria 289/90 | Cr$3.674,06 |
01/06/90 | Portaria 308/90 | Cr$3.857,66 |
01/07/90 | Portaria 415/90 | Cr$4.904,76 |
01/08/90 | Portaria 429/90 e 3.557/90 | Cr$5.203,46 |
01/09/90 | Portaria 512/90 | Cr$6.056,31 |
01/10/90 | Portaria 561/90 | Cr$6.425,14 |
01/11/90 | Portaria 631/90 | Cr$8.329,55 |
01/12/90 | Portaria 729/90 | Cr$8.836,82 |
01/01/91 | Portaria 854/90 | Cr$12.325,60 |
01/02/91 | MP 295/91 (Lei 8.178/91) | Cr$15.895,46 |
01/03/91 | Lei 8.178/91 | Cr$17.000,00 |
01/09/91 | Lei 8.222/91 | Cr$42.000,00 |
01/01/92 | Lei 8.222/91 e Port. 42/92 - MEFP | Cr$96.037,33 |
01/05/92 | Lei 8.419/92 | Cr$230.000,00 |
01/09/92 | Lei 8.419/92 e Port. 601/92 - MEFP | Cr$522.186,94 |
01/01/93 | Lei 8.542/92 | Cr$1.250.700,00 |
01/03/93 | Port. Interministerial 04/93 | Cr$1.709.400,00 |
01/05/93 | Port. Interministerial 07/93 | Cr$3.303.300,00 |
01/07/93 | Port. Interministerial 11/93 | Cr$4.639.800,00 |
01/08/93 | Port. Interministerial 12/93 | CR$5.534,00 |
01/09/93 | Port. Interministerial 14/94 | CR$9.606,00 |
01/10/93 | Port. Interministerial 15/93 | CR$12.024,00 |
01/11/93 | Port. Interministerial 17/93 | CR$15.021,00 |
01/12/93 | Port. Interministerial 19/93 | CR$18.760,00 |
01/01/94 | Port. Interministerial 20/93 | CR$32.882,00 |
01/02/94 | Port. Interministerial 02/94 | CR$42.829,00 |
01/03/94 | Port. Interministerial 04/94 | URV 64,79 = R$64,79 |
01/07/94 | MP 566/94 | R$64,79 |
01/09/94 | MP 637/94 | R$70,00 |
01/05/95 | Lei 9.032/95 | R$100,00 |
01/05/96 | R$112,00 | |
01/05/97 | | R$120,00 |
01/05/98 | | R$130,00 |
01/05/99 | | R$136,00 |
03/04/00 | MP 2019 de 23/03/00 e 2019-1 de 20/04/00 Convertidas na Lei nº 9971, de 18/05/2000. | R$151,00 |
01/04/01 | | R$180,00 |
01/04/02 | Medida Provisória n° 35 publicada no D.O.U. em 28.03.2002 | R$ 200,00 |
01/04/03 | Lei n° 10.699, de 09.07.2003 - Clique aqui - | R$ 240,00 |
01/05/04 | Lei n° 10.888, de 24.06.2004 - Clique aqui - | R$ 260,00 |
01/05/05 | Lei nº 11.164, de 18.08.2005 - Clique aqui - | R$ 300,00 |
01/04/2006 | Lei nº 11.321, de 07.07.2006 - Clique aqui - Leia matéria aqui | R$ 350,00 |
01/04/2007 | Lei nº 11.498, de 28.06.2007 - Clique aqui - | R$ 380,00 |
01/03/2008 | Medida Provisória nº 421/2008, de 29.02.2008 - Clique aqui - | R$ 415,00 |
fonte: www.portalbrasil.net