├── .gitignore ├── components ├── UI │ ├── index.tsx │ ├── Logout.tsx │ ├── Input.tsx │ └── Combobox.tsx ├── Navbar.tsx ├── Tab.tsx └── pages │ ├── Read.tsx │ └── Predict.tsx ├── .DS_Store ├── lib ├── const.ts ├── gender.ts ├── supabase.ts ├── provinsi.ts └── kabupaten.ts ├── styles └── globals.css ├── next-env.d.ts ├── utils ├── string.ts ├── read.ts ├── trpc.ts └── extract.ts ├── postcss.config.js ├── biome.json ├── server ├── app.ts ├── routers │ └── nik.ts ├── auth.ts └── trpc.ts ├── pages ├── _app.tsx ├── api │ ├── trpc │ │ └── [trpc].ts │ ├── v0 │ │ └── nik.ts │ └── auth │ │ └── [...nextauth].ts ├── index.tsx └── login.tsx ├── tailwind.config.js ├── middleware.ts ├── tsconfig.json ├── README.md ├── public ├── vercel.svg └── favicon.ico ├── LICENSE └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .next 3 | .env -------------------------------------------------------------------------------- /components/UI/index.tsx: -------------------------------------------------------------------------------- 1 | export * from "./Combobox"; 2 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zakiego/nik-reader/HEAD/.DS_Store -------------------------------------------------------------------------------- /lib/const.ts: -------------------------------------------------------------------------------- 1 | export const Feature = ["read", "predict"] as const; 2 | export type Feature = (typeof Feature)[number]; 3 | 4 | export const NIK_LENGTH = 16; 5 | -------------------------------------------------------------------------------- /lib/gender.ts: -------------------------------------------------------------------------------- 1 | export const GENDER = [ 2 | { 3 | value: "L", 4 | label: "Laki-laki", 5 | }, 6 | { 7 | value: "P", 8 | label: "Perempuan", 9 | }, 10 | ] as const; 11 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&display=swap"); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /utils/string.ts: -------------------------------------------------------------------------------- 1 | import { chunk } from "lodash"; 2 | 3 | export const chunkTwoChars = (str: string): string => { 4 | const split = chunk(str, 2) 5 | .map((v) => v.join("")) 6 | .join(" "); 7 | 8 | return split; 9 | }; 10 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | // If you want to use other PostCSS plugins, see the following: 2 | // https://tailwindcss.com/docs/using-with-preprocessors 3 | module.exports = { 4 | plugins: { 5 | tailwindcss: {}, 6 | autoprefixer: {}, 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json", 3 | "organizeImports": { 4 | "enabled": true 5 | }, 6 | "linter": { 7 | "enabled": true, 8 | "rules": { 9 | "recommended": true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/supabase.ts: -------------------------------------------------------------------------------- 1 | import { createClient } from "@supabase/supabase-js"; 2 | 3 | const supabaseUrl: string = process.env.NEXT_PUBLIC_SUPABASE_URL; 4 | const supabaseKey: string = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; 5 | 6 | export const supabase = createClient(supabaseUrl, supabaseKey); 7 | -------------------------------------------------------------------------------- /server/app.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | import { nikRouter } from "~/server/routers/nik"; 3 | import { createTRPCRouter, publicProcedure } from "~/server/trpc"; 4 | 5 | export const appRouter = createTRPCRouter({ 6 | nik: nikRouter, 7 | }); 8 | 9 | // export type definition of API 10 | export type AppRouter = typeof appRouter; 11 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "~/styles/globals.css"; 2 | import { trpc } from "~/utils/trpc"; 3 | import { SessionProvider } from "next-auth/react"; 4 | 5 | function MyApp({ Component, pageProps: { session, ...pageProps } }) { 6 | return ( 7 | // 8 | 9 | // */ 10 | ); 11 | } 12 | 13 | export default trpc.withTRPC(MyApp); 14 | -------------------------------------------------------------------------------- /components/Navbar.tsx: -------------------------------------------------------------------------------- 1 | import { Logout } from "~/components/UI/Logout"; 2 | 3 | export const Navbar = () => { 4 | return ( 5 |
6 |
7 |
8 |
NIK
9 |
10 | {/* */} 11 |
12 | ); 13 | }; 14 | -------------------------------------------------------------------------------- /components/UI/Logout.tsx: -------------------------------------------------------------------------------- 1 | import { signOut } from "next-auth/react"; 2 | 3 | export const Logout = () => { 4 | return ( 5 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /server/routers/nik.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | import { 4 | createTRPCRouter, 5 | privateProcedure, 6 | publicProcedure, 7 | } from "~/server/trpc"; 8 | import { extractDataFromNIK } from "~/utils/read"; 9 | 10 | export const nikRouter = createTRPCRouter({ 11 | read: publicProcedure 12 | .input( 13 | z.object({ 14 | nik: z.coerce.string().length(16), 15 | }), 16 | ) 17 | .mutation(async ({ input }) => { 18 | const { nik } = input; 19 | 20 | return extractDataFromNIK(nik); 21 | }), 22 | }); 23 | -------------------------------------------------------------------------------- /pages/api/trpc/[trpc].ts: -------------------------------------------------------------------------------- 1 | import * as trpcNext from "@trpc/server/adapters/next"; 2 | import { appRouter } from "~/server/app"; 3 | import { createTRPCContext } from "~/server/trpc"; 4 | 5 | export default trpcNext.createNextApiHandler({ 6 | router: appRouter, 7 | createContext: createTRPCContext, 8 | onError: 9 | process.env.NODE_ENV === "development" 10 | ? ({ path, error }) => { 11 | console.error( 12 | `❌ tRPC failed on ${path ?? ""}: ${error.message}`, 13 | ); 14 | } 15 | : undefined, 16 | }); 17 | -------------------------------------------------------------------------------- /server/auth.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | GetServerSidePropsContext, 3 | NextApiRequest, 4 | NextApiResponse, 5 | } from "next"; 6 | import { getServerSession as $getServerSession } from "next-auth"; 7 | import { authOptions } from "~/pages/api/auth/[...nextauth]"; 8 | 9 | type GetServerSessionContext = 10 | | { 11 | req: GetServerSidePropsContext["req"]; 12 | res: GetServerSidePropsContext["res"]; 13 | } 14 | | { req: NextApiRequest; res: NextApiResponse }; 15 | export const getServerSession = (ctx: GetServerSessionContext) => { 16 | return $getServerSession(ctx.req, ctx.res, authOptions); 17 | }; 18 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const colors = require("tailwindcss/colors"); 2 | 3 | module.exports = { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | ], 8 | theme: { 9 | extend: { 10 | colors: { 11 | "hitam-50": "#E8E8E8", 12 | "hitam-100": "#868C91", 13 | "hitam-900": "#0E1111", 14 | garis: "#EEF0F2", 15 | }, 16 | fontFamily: { 17 | sans: ["Inter", "system-ui"], 18 | }, 19 | }, 20 | }, 21 | variants: { 22 | extend: {}, 23 | }, 24 | plugins: [require("@tailwindcss/forms")], 25 | }; 26 | -------------------------------------------------------------------------------- /pages/api/v0/nik.ts: -------------------------------------------------------------------------------- 1 | import { NextApiRequest, NextApiResponse } from "next"; 2 | import { z } from "zod"; 3 | import { extractDataFromNIK } from "~/utils/read"; 4 | 5 | export default function handler(req: NextApiRequest, res: NextApiResponse) { 6 | const { nik } = req.body; 7 | 8 | const validate = z.coerce.string().length(16); 9 | 10 | const isValid = validate.safeParse(nik); 11 | 12 | if (!isValid.success) { 13 | return res 14 | .status(400) 15 | .json({ message: "NIK is not valid, character length must be 16" }); 16 | } 17 | 18 | const data = extractDataFromNIK(nik); 19 | 20 | res.status(200).json(data); 21 | } 22 | -------------------------------------------------------------------------------- /middleware.ts: -------------------------------------------------------------------------------- 1 | import { withAuth } from "next-auth/middleware"; 2 | 3 | // export default withAuth(function middleware(req) {}, { 4 | // callbacks: { 5 | // authorized: ({ req, token }) => { 6 | // if (token) { 7 | // return true; 8 | // } 9 | // return false; 10 | // }, 11 | // }, 12 | // pages: { 13 | // signIn: "/login", 14 | // }, 15 | // }); 16 | 17 | // export const config = { 18 | // matcher: ["/((?!api|_next/static|_next/image|favicon.ico/).*)"], 19 | // }; 20 | 21 | import { NextResponse } from "next/server"; 22 | import type { NextRequest } from "next/server"; 23 | 24 | export function middleware(request: NextRequest) { 25 | return NextResponse.next(); 26 | } 27 | 28 | export const config = { 29 | matcher: "/", 30 | }; 31 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "baseUrl": "./", 10 | "paths": { 11 | "~/*": [ 12 | "./*" 13 | ] 14 | }, 15 | "allowJs": true, 16 | "skipLibCheck": true, 17 | "strict": false, 18 | "forceConsistentCasingInFileNames": true, 19 | "noEmit": true, 20 | "esModuleInterop": true, 21 | "module": "esnext", 22 | "moduleResolution": "node", 23 | "resolveJsonModule": true, 24 | "isolatedModules": true, 25 | "jsx": "preserve", 26 | "incremental": true 27 | }, 28 | "include": [ 29 | "next-env.d.ts", 30 | "**/*.ts", 31 | "**/*.tsx" 32 | ], 33 | "exclude": [ 34 | "node_modules" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /utils/read.ts: -------------------------------------------------------------------------------- 1 | import { 2 | extractIdsFromNIK, 3 | getBirthDate, 4 | getGender, 5 | getKabupaten, 6 | getKecamatan, 7 | getProvinsi, 8 | } from "~/utils/extract"; 9 | 10 | export const extractDataFromNIK = (nik: string) => { 11 | const { idProv, idKab, idKec, idGender, idBirthDate, idUniqueId } = 12 | extractIdsFromNIK(nik); 13 | 14 | const prov = getProvinsi({ idProv }); 15 | const kab = getKabupaten({ idKab }); 16 | const kec = getKecamatan({ idKec }); 17 | const gender = getGender({ idGender }); 18 | const birthDate = getBirthDate({ idBirthDate }); 19 | 20 | const data = { 21 | provinsi: prov, 22 | kabupaten: kab, 23 | kecamatan: kec, 24 | gender: gender, 25 | birthDate: birthDate, 26 | uniqueId: idUniqueId, 27 | }; 28 | 29 | return data; 30 | }; 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NIK Reader and Generator 2 | 3 | This project is a web-based tool for reading and generating NIK (Nomor Induk Kependudukan) details. It provides functionalities to input a NIK, read the details, and generate a new NIK. 4 | 5 | ## Features 6 | 7 | - **Read NIK**: Input a NIK to get detailed information including province, district, sub-district, gender, date of birth, and unique ID. 8 | - **Generate NIK**: Generate a new valid NIK. 9 | 10 | ## Development 11 | 12 | 1. Clone the repository: 13 | 14 | ```bash 15 | https://github.com/zakiego/nik-reader.git 16 | ``` 17 | 18 | 2. Install dependencies: 19 | 20 | ```bash 21 | pnpm install 22 | ``` 23 | 24 | 3. Run the development server: 25 | 26 | ```bash 27 | pnpm dev 28 | ``` 29 | 30 | 4. Open the browser and navigate to `http://localhost:3000`. 31 | 32 | ## License 33 | 34 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 35 | -------------------------------------------------------------------------------- /components/UI/Input.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | DetailedHTMLProps, 3 | FC, 4 | HTMLAttributes, 5 | InputHTMLAttributes, 6 | } from "react"; 7 | 8 | interface Props { 9 | label: string; 10 | inputProps?: InputHTMLAttributes; 11 | containerProps?: DetailedHTMLProps< 12 | HTMLAttributes, 13 | HTMLDivElement 14 | >; 15 | } 16 | 17 | export const Input: FC = (props) => { 18 | const { label, inputProps, containerProps } = props; 19 | 20 | return ( 21 |
22 |

23 | {label} 24 |

25 | 29 |
30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { match } from "ts-pattern"; 3 | import { Navbar } from "~/components/Navbar"; 4 | import { Tab } from "~/components/Tab"; 5 | import { Predict } from "~/components/pages/Predict"; 6 | import { Read } from "~/components/pages/Read"; 7 | import type { Feature } from "~/lib/const"; 8 | 9 | export default function Home() { 10 | const [selectedTab, setSelectedTab] = useState("read"); 11 | 12 | const title = match(selectedTab) 13 | .with("read", () => "Baca NIK") 14 | .with("predict", () => "Generate NIK") 15 | .otherwise(() => "NIK"); 16 | 17 | return ( 18 |
19 | {title} 20 | 21 | 22 | {match(selectedTab) 23 | .with("read", () => ) 24 | .with("predict", () => ) 25 | .exhaustive()} 26 |
27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /components/Tab.tsx: -------------------------------------------------------------------------------- 1 | import { Dispatch, FC, SetStateAction } from "react"; 2 | import { Feature } from "~/lib/const"; 3 | 4 | interface Props { 5 | selectedTab: Feature; 6 | setSelectedTab: Dispatch>; 7 | } 8 | 9 | export const Tab: FC = ({ selectedTab, setSelectedTab }) => { 10 | return ( 11 |
12 | {Feature.map((tab) => ( 13 |
14 | 27 |
28 | ))} 29 |
30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 M. Zakiyuddin Munziri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pages/api/auth/[...nextauth].ts: -------------------------------------------------------------------------------- 1 | import NextAuth, { AuthOptions, DefaultSession } from "next-auth"; 2 | import CredentialsProvider from "next-auth/providers/credentials"; 3 | 4 | declare module "next-auth" { 5 | interface Session extends DefaultSession { 6 | user: { 7 | id: string; 8 | } & DefaultSession["user"]; 9 | } 10 | } 11 | 12 | declare module "next-auth/jwt" { 13 | interface JWT { 14 | id: string; 15 | } 16 | } 17 | 18 | export const authOptions: AuthOptions = { 19 | session: { 20 | strategy: "jwt", 21 | }, 22 | providers: [ 23 | CredentialsProvider({ 24 | name: "Credentials", 25 | id: "credentials", 26 | credentials: { 27 | secretCode: { label: "SecretCode", type: "password" }, 28 | }, 29 | async authorize(credentials) { 30 | console.log("Trying to login with credentials: ", credentials); 31 | 32 | const user = { 33 | id: "1", 34 | name: "SUPERADMIN", 35 | }; 36 | 37 | if (credentials.secretCode === process.env.SECRET_CODE) { 38 | return user; 39 | } 40 | 41 | return null; 42 | }, 43 | }), 44 | ], 45 | }; 46 | export default NextAuth(authOptions); 47 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "next dev", 5 | "build": "next build", 6 | "start": "next start" 7 | }, 8 | "dependencies": { 9 | "@headlessui/react": "^1.7.15", 10 | "@heroicons/react": "^2.0.18", 11 | "@hookform/resolvers": "^3.1.1", 12 | "@supabase/supabase-js": "^2.26.0", 13 | "@tailwindcss/forms": "^0.5.3", 14 | "@tanstack/react-query": "^4.29.19", 15 | "@trpc/client": "^10.32.0", 16 | "@trpc/next": "^10.32.0", 17 | "@trpc/react-query": "^10.32.0", 18 | "@trpc/server": "^10.32.0", 19 | "date-fns": "^2.30.0", 20 | "lodash": "^4.17.21", 21 | "next": "latest", 22 | "next-auth": "^4.22.1", 23 | "react": "^18.2.0", 24 | "react-dom": "^18.2.0", 25 | "react-hook-form": "^7.45.0", 26 | "react-icons": "^4.10.1", 27 | "superjson": "^1.12.4", 28 | "ts-pattern": "^5.0.1", 29 | "zod": "^3.21.4" 30 | }, 31 | "devDependencies": { 32 | "@biomejs/biome": "1.4.1", 33 | "@types/lodash": "^4.14.195", 34 | "@types/react": "^18.2.14", 35 | "autoprefixer": "^10.4.14", 36 | "eslint": "8.43.0", 37 | "eslint-config-next": "13.4.7", 38 | "postcss": "^8.4.24", 39 | "tailwindcss": "^3.3.2", 40 | "typescript": "^5.1.3" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /utils/trpc.ts: -------------------------------------------------------------------------------- 1 | import { httpBatchLink } from "@trpc/client"; 2 | import { createTRPCNext } from "@trpc/next"; 3 | import { type AppRouter } from "~/server/app"; 4 | import superjson from "superjson"; 5 | import { httpLink } from "@trpc/client"; 6 | 7 | function getBaseUrl() { 8 | if (typeof window !== "undefined") 9 | // browser should use relative path 10 | return ""; 11 | 12 | if (process.env.VERCEL_URL) 13 | // reference for vercel.com 14 | return `https://${process.env.VERCEL_URL}`; 15 | 16 | if (process.env.RENDER_INTERNAL_HOSTNAME) 17 | // reference for render.com 18 | return `http://${process.env.RENDER_INTERNAL_HOSTNAME}:${process.env.PORT}`; 19 | 20 | // assume localhost 21 | return `http://localhost:${process.env.PORT ?? 3000}`; 22 | } 23 | 24 | export const trpc = createTRPCNext({ 25 | config(opts) { 26 | return { 27 | links: [ 28 | httpBatchLink({ 29 | /** 30 | * If you want to use SSR, you need to use the server's full URL 31 | * @link https://trpc.io/docs/ssr 32 | **/ 33 | url: `${getBaseUrl()}/api/trpc`, 34 | 35 | // You can pass any HTTP headers you wish here 36 | async headers() { 37 | return { 38 | // authorization: getAuthCookie(), 39 | }; 40 | }, 41 | }), 42 | ], 43 | transformer: superjson, 44 | }; 45 | }, 46 | /** 47 | * @link https://trpc.io/docs/ssr 48 | **/ 49 | ssr: false, 50 | }); 51 | -------------------------------------------------------------------------------- /server/trpc.ts: -------------------------------------------------------------------------------- 1 | import { TRPCError, initTRPC } from "@trpc/server"; 2 | import { type CreateNextContextOptions } from "@trpc/server/adapters/next"; 3 | import { Session } from "next-auth"; 4 | import superjson from "superjson"; 5 | import { ZodError } from "zod"; 6 | import { getServerSession } from "~/server/auth"; 7 | 8 | type CreateContextOptions = { 9 | session: Session | null; 10 | }; 11 | 12 | const createInnerTRPCContext = (opts: CreateContextOptions) => { 13 | return { 14 | session: opts.session, 15 | }; 16 | }; 17 | 18 | export const createTRPCContext = async (opts: CreateNextContextOptions) => { 19 | const { req, res } = opts; 20 | 21 | const session = await getServerSession({ req, res }); 22 | 23 | return createInnerTRPCContext({ 24 | session, 25 | }); 26 | }; 27 | 28 | const t = initTRPC.context().create({ 29 | transformer: superjson, 30 | errorFormatter({ shape, error }) { 31 | return { 32 | ...shape, 33 | data: { 34 | ...shape.data, 35 | zodError: 36 | error.cause instanceof ZodError ? error.cause.flatten() : null, 37 | }, 38 | }; 39 | }, 40 | }); 41 | 42 | export const createTRPCRouter = t.router; 43 | export const publicProcedure = t.procedure; 44 | 45 | const enforceUserIsAuthed = t.middleware(({ ctx, next }) => { 46 | if (!ctx.session) { 47 | throw new TRPCError({ code: "UNAUTHORIZED" }); 48 | } 49 | 50 | return next({ 51 | ctx: { 52 | // infers the `session` as non-nullable 53 | session: { ...ctx.session, user: ctx.session.user }, 54 | }, 55 | }); 56 | }); 57 | 58 | export const privateProcedure = t.procedure.use(enforceUserIsAuthed); 59 | -------------------------------------------------------------------------------- /utils/extract.ts: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | import { KECAMATAN } from "~/lib/kecamatan"; 3 | import { format, parse } from "date-fns"; 4 | import { PROVINSI } from "~/lib/provinsi"; 5 | import { KABUPATEN } from "~/lib/kabupaten"; 6 | 7 | export function extractIdsFromNIK(NIK: string) { 8 | const idProv = NIK.substring(0, 2); 9 | const idKab = NIK.substring(0, 4); 10 | const idKec = NIK.substring(0, 6); 11 | const idGender = NIK.substring(6, 8); 12 | const idBirthDate = NIK.substring(6, 12); 13 | const idUniqueId = NIK.substring(12, 16); 14 | 15 | return { 16 | idProv, 17 | idKab, 18 | idKec, 19 | idGender, 20 | idBirthDate, 21 | idUniqueId, 22 | }; 23 | } 24 | 25 | export const getProvinsi = ({ idProv }: { idProv: string }) => { 26 | const prov = PROVINSI.find((p) => p.idProv === idProv); 27 | return prov?.name || null; 28 | }; 29 | 30 | export const getKabupaten = ({ idKab }: { idKab: string }) => { 31 | const kab = KABUPATEN.find((k) => k.idKab === idKab); 32 | return kab?.name || null; 33 | }; 34 | 35 | export const getKecamatan = ({ idKec }: { idKec: string }) => { 36 | const kec = KECAMATAN.find((k) => k.idKec === idKec); 37 | return kec?.name?.toUpperCase() || null; 38 | }; 39 | 40 | export const getGender = ({ idGender }: { idGender: string | number }) => { 41 | try { 42 | const id = z.coerce.number().parse(idGender); 43 | 44 | if (id > 40) { 45 | return "PEREMPUAN"; 46 | } 47 | 48 | return "LAKI-LAKI"; 49 | } catch (error) { 50 | return null; 51 | } 52 | }; 53 | 54 | export const getBirthDate = ({ 55 | idBirthDate, 56 | }: { 57 | idBirthDate: number | string; 58 | }) => { 59 | try { 60 | const id = z.coerce.string().parse(idBirthDate); 61 | 62 | const rawDay = id.substring(0, 2); 63 | const day = parseInt(rawDay) > 40 ? parseInt(rawDay) - 40 : rawDay; 64 | const month = id.substring(2, 4); 65 | // TODO: im not sure about this to hanle 2 digit year 66 | const year = 67 | parseInt(id.substring(4, 6)) < 22 68 | ? `20${id.substring(4, 6)}` 69 | : `19${id.substring(4, 6)}`; 70 | 71 | const date = parse(`${day}/${month}/${year}`, "dd/MM/yyyy", new Date()); 72 | 73 | return format(date, "dd/MM/yyyy"); 74 | } catch (error) { 75 | return null; 76 | } 77 | }; 78 | -------------------------------------------------------------------------------- /lib/provinsi.ts: -------------------------------------------------------------------------------- 1 | export const PROVINSI = [ 2 | { 3 | idProv: "11", 4 | name: "ACEH", 5 | }, 6 | { 7 | idProv: "12", 8 | name: "SUMATERA UTARA", 9 | }, 10 | { 11 | idProv: "13", 12 | name: "SUMATERA BARAT", 13 | }, 14 | { 15 | idProv: "14", 16 | name: "RIAU", 17 | }, 18 | { 19 | idProv: "15", 20 | name: "JAMBI", 21 | }, 22 | { 23 | idProv: "16", 24 | name: "SUMATERA SELATAN", 25 | }, 26 | { 27 | idProv: "17", 28 | name: "BENGKULU", 29 | }, 30 | { 31 | idProv: "18", 32 | name: "LAMPUNG", 33 | }, 34 | { 35 | idProv: "19", 36 | name: "KEPULAUAN BANGKA BELITUNG", 37 | }, 38 | { 39 | idProv: "21", 40 | name: "KEPULAUAN RIAU", 41 | }, 42 | { 43 | idProv: "31", 44 | name: "DKI JAKARTA", 45 | }, 46 | { 47 | idProv: "32", 48 | name: "JAWA BARAT", 49 | }, 50 | { 51 | idProv: "33", 52 | name: "JAWA TENGAH", 53 | }, 54 | { 55 | idProv: "34", 56 | name: "DAERAH ISTIMEWA YOGYAKARTA", 57 | }, 58 | { 59 | idProv: "35", 60 | name: "JAWA TIMUR", 61 | }, 62 | { 63 | idProv: "36", 64 | name: "BANTEN", 65 | }, 66 | { 67 | idProv: "51", 68 | name: "BALI", 69 | }, 70 | { 71 | idProv: "52", 72 | name: "NUSA TENGGARA BARAT", 73 | }, 74 | { 75 | idProv: "53", 76 | name: "NUSA TENGGARA TIMUR", 77 | }, 78 | { 79 | idProv: "61", 80 | name: "KALIMANTAN BARAT", 81 | }, 82 | { 83 | idProv: "62", 84 | name: "KALIMANTAN TENGAH", 85 | }, 86 | { 87 | idProv: "63", 88 | name: "KALIMANTAN SELATAN", 89 | }, 90 | { 91 | idProv: "64", 92 | name: "KALIMANTAN TIMUR", 93 | }, 94 | { 95 | idProv: "65", 96 | name: "KALIMANTAN UTARA", 97 | }, 98 | { 99 | idProv: "71", 100 | name: "SULAWESI UTARA", 101 | }, 102 | { 103 | idProv: "72", 104 | name: "SULAWESI TENGAH", 105 | }, 106 | { 107 | idProv: "73", 108 | name: "SULAWESI SELATAN", 109 | }, 110 | { 111 | idProv: "74", 112 | name: "SULAWESI TENGGARA", 113 | }, 114 | { 115 | idProv: "75", 116 | name: "GORONTALO", 117 | }, 118 | { 119 | idProv: "76", 120 | name: "SULAWESI BARAT", 121 | }, 122 | { 123 | idProv: "81", 124 | name: "MALUKU", 125 | }, 126 | { 127 | idProv: "82", 128 | name: "MALUKU UTARA", 129 | }, 130 | { 131 | idProv: "91", 132 | name: "PAPUA", 133 | }, 134 | { 135 | idProv: "92", 136 | name: "PAPUA BARAT", 137 | }, 138 | ] as const; 139 | -------------------------------------------------------------------------------- /components/UI/Combobox.tsx: -------------------------------------------------------------------------------- 1 | import { FC, useState } from "react"; 2 | import { CheckIcon, ChevronUpDownIcon } from "@heroicons/react/20/solid"; 3 | import { Combobox as ComboboxHeadless } from "@headlessui/react"; 4 | import { Control, useController, useWatch } from "react-hook-form"; 5 | 6 | function classNames(...classes) { 7 | return classes.filter(Boolean).join(" "); 8 | } 9 | 10 | interface Props { 11 | label: string; 12 | options: { 13 | value: string; 14 | label: string; 15 | }[]; 16 | className?: string; 17 | name: string; 18 | control: Control; 19 | isDisabled?: boolean; 20 | } 21 | 22 | export const Combobox: FC = ({ 23 | label, 24 | options, 25 | className, 26 | control, 27 | name, 28 | isDisabled, 29 | }) => { 30 | const [query, setQuery] = useState(""); 31 | 32 | const filteredOptions = 33 | query === "" 34 | ? options 35 | : options.filter((option) => { 36 | return option.label.toLowerCase().includes(query.toLowerCase()); 37 | }); 38 | 39 | const { field } = useController({ 40 | name, 41 | control, 42 | }); 43 | 44 | const { onChange, value, ...rest } = field; 45 | 46 | const watchValue = useWatch({ 47 | control, 48 | name, 49 | }); 50 | 51 | return ( 52 | { 55 | onChange(value); 56 | }} 57 | className={className} 58 | disabled={isDisabled} 59 | // value={watchValue} 60 | value={value} 61 | > 62 | 63 | {label} 64 | 65 |
66 | { 69 | setQuery(event.target.value); 70 | }} 71 | displayValue={(value: Props["options"][number]) => value?.label} 72 | id={name} 73 | name={name} 74 | /> 75 | 76 | 81 | 82 | {filteredOptions.length > 0 && ( 83 | 84 | {filteredOptions.map((option) => ( 85 | 89 | classNames( 90 | "relative cursor-default select-none py-2 pl-3 pr-9 text-xs", 91 | active ? "bg-gray-600 text-white" : "text-gray-900", 92 | ) 93 | } 94 | > 95 | {({ active, selected }) => ( 96 | <> 97 | 103 | {option.label} 104 | 105 | 106 | {selected && ( 107 | 113 | 115 | )} 116 | 117 | )} 118 | 119 | ))} 120 | 121 | )} 122 |
123 |
124 | ); 125 | }; 126 | -------------------------------------------------------------------------------- /pages/login.tsx: -------------------------------------------------------------------------------- 1 | import { XCircleIcon } from "@heroicons/react/20/solid"; 2 | import { getServerSession } from "next-auth"; 3 | import { signIn } from "next-auth/react"; 4 | import { useRouter } from "next/router"; 5 | import { type FC, useState } from "react"; 6 | import { authOptions } from "~/pages/api/auth/[...nextauth]"; 7 | 8 | export const getServerSideProps = async (context) => { 9 | return { 10 | redirect: { 11 | destination: "/", 12 | permanent: true, 13 | }, 14 | }; 15 | }; 16 | 17 | const Login = () => { 18 | const router = useRouter(); 19 | const [secretCode, setSecretCode] = useState(""); 20 | const [errorMessages, setErrorMessages] = useState(""); 21 | 22 | const handleLogin = async (e) => { 23 | e.preventDefault(); 24 | const login = await signIn("credentials", { 25 | secretCode: secretCode, 26 | callbackUrl: "/", 27 | redirect: false, 28 | }); 29 | 30 | if (login.ok) { 31 | return router.push("/"); 32 | } 33 | 34 | if (login.status === 401) { 35 | return setErrorMessages("Invalid secret code"); 36 | } 37 | 38 | return setErrorMessages("Something went wrong"); 39 | }; 40 | 41 | return ( 42 | <> 43 | Login 44 |
45 |
46 |
47 |
48 |

49 | Sign in for exclusive access 50 |

51 |

52 | Ping me at{" "} 53 | 59 | @zakiego 60 | {" "} 61 | for the secret code 🤣 62 |

63 |

64 | And tell me why {`you're`} interested in trying it. Please note 65 | that this project is limited due to its potential for abuse. 66 |

67 |
68 | 69 |
70 |
71 |
72 | {errorMessages && } 73 |
74 |
75 |
76 | 82 |
83 | setSecretCode(e.target.value)} 90 | /> 91 |
92 |
93 | 94 |
95 | 102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | 110 | ); 111 | }; 112 | 113 | export default Login; 114 | 115 | interface AlertProps { 116 | message: string; 117 | } 118 | 119 | const Alert: FC = ({ message }) => { 120 | return ( 121 |
122 |
123 |
124 |
126 |
127 |

{message}

128 |
129 |
130 |
131 | ); 132 | }; 133 | -------------------------------------------------------------------------------- /components/pages/Read.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { useForm } from "react-hook-form"; 3 | import { zodResolver } from "@hookform/resolvers/zod"; 4 | import { z } from "zod"; 5 | import { match } from "ts-pattern"; 6 | import { trpc } from "~/utils/trpc"; 7 | import { AiOutlineLoading3Quarters } from "react-icons/ai"; 8 | import { XCircleIcon } from "@heroicons/react/20/solid"; 9 | 10 | type FormValues = { 11 | nik: string; 12 | }; 13 | 14 | const schema = z.object({ 15 | nik: z.string().length(16), 16 | }); 17 | 18 | export const Read = () => { 19 | const { 20 | register, 21 | watch, 22 | formState: { isValid }, 23 | handleSubmit, 24 | setValue: formSetValue, 25 | trigger: formTrigger, 26 | } = useForm({ 27 | resolver: zodResolver(schema), 28 | }); 29 | 30 | const inputLength = watch("nik")?.length || 0; 31 | 32 | const readNIK = trpc.nik.read.useMutation(); 33 | 34 | const { data } = readNIK; 35 | 36 | const onSubmit = handleSubmit(async (data: FormValues) => { 37 | await readNIK.mutate(data); 38 | }); 39 | 40 | return ( 41 | <> 42 |
43 |
44 | NIK 45 |
46 |
47 | "border-green-600") 53 | .when( 54 | (length) => length < 16 && length >= 1, 55 | () => "border-red-400", 56 | ) 57 | .otherwise(() => "border-garis")} 58 | w-full text-xl text-center mt-2 space-x-1 border-b-2 outline-none`} 59 | onChange={(e) => { 60 | // get only numbers 61 | const value = e.target.value.replace(/\D/g, ""); 62 | e.target.value = value; 63 | formSetValue("nik", value); 64 | formTrigger("nik"); 65 | }} 66 | /> 67 | 82 |
83 |
84 | 85 |
86 |
87 |
Detail
88 | {readNIK.data && ( 89 | 96 | )} 97 |
98 | 99 |
100 |
101 |
Provinsi
102 | 103 | {data?.provinsi} 104 | 105 |
106 |
107 |
108 |
Kabupaten
109 | 110 | {data?.kabupaten} 111 | 112 |
113 |
114 |
Kecamatan
115 | 116 | {data?.kecamatan} 117 | 118 |
119 |
120 | 121 |
122 |
123 |
Jenis Kelamin
124 | 125 | {data?.gender} 126 | 127 |
128 |
129 |
Tanggal Lahir
130 | 131 | {data?.birthDate} 132 | 133 |
134 |
135 | 136 |
137 |
ID Unik
138 | 139 | {data?.uniqueId} 140 | 141 |
142 |
143 |
144 | 145 | ); 146 | }; 147 | 148 | const NullGuard = ({ 149 | isLoading, 150 | children, 151 | }: { 152 | isLoading: boolean; 153 | // biome-ignore lint/suspicious/noExplicitAny: 154 | children: any; 155 | }) => { 156 | if (isLoading) { 157 | return
; 158 | } 159 | 160 | if (children === null) { 161 | return

ERROR

; 162 | } 163 | 164 | if (children === undefined) { 165 | return

-

; 166 | } 167 | 168 | return

{children}

; 169 | }; 170 | -------------------------------------------------------------------------------- /components/pages/Predict.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable react-hooks/exhaustive-deps */ 2 | import { Combobox } from "~/components/UI"; 3 | import { PROVINSI } from "~/lib/provinsi"; 4 | import { KABUPATEN } from "~/lib/kabupaten"; 5 | import { KECAMATAN } from "~/lib/kecamatan"; 6 | import { GENDER } from "~/lib/gender"; 7 | import { Input } from "~/components/UI/Input"; 8 | import { useForm, useWatch } from "react-hook-form"; 9 | import { P, match } from "ts-pattern"; 10 | import { useEffect } from "react"; 11 | import { chunk, split } from "lodash"; 12 | import { chunkTwoChars } from "~/utils/string"; 13 | 14 | type ComboboxOption = { 15 | value: string; 16 | label: string; 17 | }; 18 | 19 | interface FormValues { 20 | provinsi: ComboboxOption; 21 | kabupaten: ComboboxOption; 22 | kecamatan: ComboboxOption; 23 | gender: ComboboxOption; 24 | birthDate: string; 25 | } 26 | 27 | export const Predict = () => { 28 | const { register, control, setValue, watch, resetField } = 29 | useForm({}); 30 | 31 | const watchValues = useWatch({ 32 | control, 33 | }); 34 | 35 | const createNIK = () => { 36 | const regionalCode = match(watchValues) 37 | .when( 38 | (v) => v.kecamatan, 39 | (v) => { 40 | const chunk = chunkTwoChars(v.kecamatan.value); 41 | 42 | return `${chunk}`; 43 | }, 44 | ) 45 | .when( 46 | (v) => v.kabupaten, 47 | (v) => { 48 | const chunk = chunkTwoChars(v.kabupaten.value); 49 | return `${chunk} **`; 50 | }, 51 | ) 52 | .when( 53 | (v) => v.provinsi, 54 | (v) => `${v.provinsi.value} ** **`, 55 | ) 56 | .otherwise(() => "** ** **"); 57 | 58 | const birthDate = match(watchValues) 59 | .when( 60 | (v) => v.birthDate && v.gender.value === "P", 61 | (v) => { 62 | const splitDate = split(v.birthDate, "-"); 63 | const addForty = (parseInt(splitDate[2]) + 40).toString(); 64 | const chunk = chunkTwoChars( 65 | `${addForty}${splitDate[1]}${splitDate[0].substring(2)}`, 66 | ); 67 | return chunk; 68 | }, 69 | ) 70 | .when( 71 | (v) => v.birthDate, 72 | (v) => { 73 | const splitDate = split(v.birthDate, "-"); 74 | const chunk = chunkTwoChars( 75 | `${splitDate[2]}${splitDate[1]}${splitDate[0].substring(2)}`, 76 | ); 77 | return chunk; 78 | }, 79 | ) 80 | .otherwise(() => "** ** **"); 81 | 82 | return `${regionalCode} ${birthDate} xxxx`; 83 | }; 84 | 85 | const watchProvinsi = watch("provinsi"); 86 | const watchKabupaten = watch("kabupaten"); 87 | 88 | useEffect(() => { 89 | setValue("kabupaten", null); 90 | setValue("kecamatan", null); 91 | }, [watchProvinsi]); // only re-run the effect if provinsi changes 92 | 93 | useEffect(() => { 94 | setValue("kecamatan", null); 95 | }, [watchKabupaten]); // only re-run the effect if kabupaten changes 96 | 97 | return ( 98 |
99 |
100 |
NIK
101 |
102 | {createNIK()} 103 |
104 |
105 | *4 digit terakhir adalah angka gaib yang tidak bisa ditebak 106 |
107 | 108 | {/*

{JSON.stringify(watchValues)}

*/} 109 |
110 |
111 | ({ 113 | value: prov.idProv, 114 | label: prov.name, 115 | }))} 116 | label="Provinsi" 117 | name="provinsi" 118 | control={control} 119 | /> 120 | 121 |
122 | kab.idProv === watchValues.provinsi?.value, 125 | ).map((kab) => ({ 126 | value: kab.idKab, 127 | label: kab.name, 128 | }))} 129 | label="Kabupaten/Kota" 130 | className="w-full sm:w-[50%]" 131 | name="kabupaten" 132 | control={control} 133 | isDisabled={!watchValues.provinsi} 134 | /> 135 | 136 | kec.idKab === watchValues.kabupaten?.value, 139 | ).map((kec) => ({ 140 | value: kec.idKec, 141 | label: kec.name.toUpperCase(), 142 | }))} 143 | label="Kecamatan" 144 | className="w-full sm:w-[50%]" 145 | name="kecamatan" 146 | control={control} 147 | isDisabled={!watchValues.kabupaten} 148 | /> 149 |
150 | 151 |
152 | ({ 154 | value: g.value, 155 | label: g.label.toUpperCase(), 156 | }))} 157 | label="Jenis Kelamin" 158 | className="w-full sm:w-[50%]" 159 | name="gender" 160 | control={control} 161 | /> 162 | 163 | 173 |
174 |
175 |
176 | ); 177 | }; 178 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- 1 |  h6  ��00 �%F(    ,,, === MMM ]]]eee3������###�333�DDD�SSS�___3 2 | �������&&&�777�EEE�ZZZ 3 | ;�������&&&�444;��������???(������(v����v����\��\ �� ::������������?�?����������( @ (((///888@@@HHHPPPXXX```hhhjjjr��������� ���$$$�,,,�444�<<<�DDD�LLL�TTT�\\\�cccrnnnT���������� ���&&&�...�666�>>>�FFF�NNN�VVV�]]]T ��������������&&&�...�666�>>>�FFF�NNN�XXX :��������������&&&�...�666�>>>�EEE:���������������'''�///�666�MMM'���������������'''�...'t��������������t��������������Z������������Z ������������ C����������B����������.��������.~������~������d����d����K��K��**�������������������������?�?�?���������������������������������?���?�����������������������������������(0` $$�������������� �����$$$�)))�///�444�999�???�DDD�III�OOO�TTT�ZZZ�___�ddd�hhh$��������������� ���� �&&&�+++�000�666�;;;�AAA�FFF�KKK�QQQ�VVV�\\\�aaa�fffO��������������� ���� �&&&�+++�000�666�;;;�AAA�FFF�KKK�QQQ�VVV�[[[O���������������� ���� �&&&�+++�111�666�;;;�AAA�FFF�LLL�QQQ�XXX9���������������� ����!!!�&&&�+++�111�666�<<<�AAA�FFF�KKK9����������������� ����!!!�&&&�,,,�111�777�<<<�AAA�RRR&����������������� ����!!!�'''�,,,�111�777�;;;&r����������������� ����!!!�'''�,,,�111r������������������ ����"""�'''�,,,Y������������������ ����!!!Y ������������������� ��� A������������������� �A��������������������-������������������-}����������������}����������������c��������������b��������������J������������J������������4����������4����������"��������"m������m������S����S 4 | ���� 5 | <��<�����������������������������������������������������������������������������������������?���?������������������������������������������������������������?�����?������������������������������������������������������������������������ -------------------------------------------------------------------------------- /lib/kabupaten.ts: -------------------------------------------------------------------------------- 1 | export const KABUPATEN = [ 2 | { 3 | idKab: "1101", 4 | idProv: "11", 5 | name: "KAB. ACEH SELATAN", 6 | }, 7 | { 8 | idKab: "1102", 9 | idProv: "11", 10 | name: "KAB. ACEH TENGGARA", 11 | }, 12 | { 13 | idKab: "1103", 14 | idProv: "11", 15 | name: "KAB. ACEH TIMUR", 16 | }, 17 | { 18 | idKab: "1104", 19 | idProv: "11", 20 | name: "KAB. ACEH TENGAH", 21 | }, 22 | { 23 | idKab: "1105", 24 | idProv: "11", 25 | name: "KAB. ACEH BARAT", 26 | }, 27 | { 28 | idKab: "1106", 29 | idProv: "11", 30 | name: "KAB. ACEH BESAR", 31 | }, 32 | { 33 | idKab: "1107", 34 | idProv: "11", 35 | name: "KAB. PIDIE", 36 | }, 37 | { 38 | idKab: "1108", 39 | idProv: "11", 40 | name: "KAB. ACEH UTARA", 41 | }, 42 | { 43 | idKab: "1109", 44 | idProv: "11", 45 | name: "KAB. SIMEULUE", 46 | }, 47 | { 48 | idKab: "1110", 49 | idProv: "11", 50 | name: "KAB. ACEH SINGKIL", 51 | }, 52 | { 53 | idKab: "1111", 54 | idProv: "11", 55 | name: "KAB. BIREUEN", 56 | }, 57 | { 58 | idKab: "1112", 59 | idProv: "11", 60 | name: "KAB. ACEH BARAT DAYA", 61 | }, 62 | { 63 | idKab: "1113", 64 | idProv: "11", 65 | name: "KAB. GAYO LUES", 66 | }, 67 | { 68 | idKab: "1114", 69 | idProv: "11", 70 | name: "KAB. ACEH JAYA", 71 | }, 72 | { 73 | idKab: "1115", 74 | idProv: "11", 75 | name: "KAB. NAGAN RAYA", 76 | }, 77 | { 78 | idKab: "1116", 79 | idProv: "11", 80 | name: "KAB. ACEH TAMIANG", 81 | }, 82 | { 83 | idKab: "1117", 84 | idProv: "11", 85 | name: "KAB. BENER MERIAH", 86 | }, 87 | { 88 | idKab: "1118", 89 | idProv: "11", 90 | name: "KAB. PIDIE JAYA", 91 | }, 92 | { 93 | idKab: "1171", 94 | idProv: "11", 95 | name: "KOTA BANDA ACEH", 96 | }, 97 | { 98 | idKab: "1172", 99 | idProv: "11", 100 | name: "KOTA SABANG", 101 | }, 102 | { 103 | idKab: "1173", 104 | idProv: "11", 105 | name: "KOTA LHOKSEUMAWE", 106 | }, 107 | { 108 | idKab: "1174", 109 | idProv: "11", 110 | name: "KOTA LANGSA", 111 | }, 112 | { 113 | idKab: "1175", 114 | idProv: "11", 115 | name: "KOTA SUBULUSSALAM", 116 | }, 117 | { 118 | idKab: "1201", 119 | idProv: "12", 120 | name: "KAB. TAPANULI TENGAH", 121 | }, 122 | { 123 | idKab: "1202", 124 | idProv: "12", 125 | name: "KAB. TAPANULI UTARA", 126 | }, 127 | { 128 | idKab: "1203", 129 | idProv: "12", 130 | name: "KAB. TAPANULI SELATAN", 131 | }, 132 | { 133 | idKab: "1204", 134 | idProv: "12", 135 | name: "KAB. NIAS", 136 | }, 137 | { 138 | idKab: "1205", 139 | idProv: "12", 140 | name: "KAB. LANGKAT", 141 | }, 142 | { 143 | idKab: "1206", 144 | idProv: "12", 145 | name: "KAB. KARO", 146 | }, 147 | { 148 | idKab: "1207", 149 | idProv: "12", 150 | name: "KAB. DELI SERDANG", 151 | }, 152 | { 153 | idKab: "1208", 154 | idProv: "12", 155 | name: "KAB. SIMALUNGUN", 156 | }, 157 | { 158 | idKab: "1209", 159 | idProv: "12", 160 | name: "KAB. ASAHAN", 161 | }, 162 | { 163 | idKab: "1210", 164 | idProv: "12", 165 | name: "KAB. LABUHANBATU", 166 | }, 167 | { 168 | idKab: "1211", 169 | idProv: "12", 170 | name: "KAB. DAIRI", 171 | }, 172 | { 173 | idKab: "1212", 174 | idProv: "12", 175 | name: "KAB. TOBA SAMOSIR", 176 | }, 177 | { 178 | idKab: "1213", 179 | idProv: "12", 180 | name: "KAB. MANDAILING NATAL", 181 | }, 182 | { 183 | idKab: "1214", 184 | idProv: "12", 185 | name: "KAB. NIAS SELATAN", 186 | }, 187 | { 188 | idKab: "1215", 189 | idProv: "12", 190 | name: "KAB. PAKPAK BHARAT", 191 | }, 192 | { 193 | idKab: "1216", 194 | idProv: "12", 195 | name: "KAB. HUMBANG HASUNDUTAN", 196 | }, 197 | { 198 | idKab: "1217", 199 | idProv: "12", 200 | name: "KAB. SAMOSIR", 201 | }, 202 | { 203 | idKab: "1218", 204 | idProv: "12", 205 | name: "KAB. SERDANG BEDAGAI", 206 | }, 207 | { 208 | idKab: "1219", 209 | idProv: "12", 210 | name: "KAB. BATU BARA", 211 | }, 212 | { 213 | idKab: "1220", 214 | idProv: "12", 215 | name: "KAB. PADANG LAWAS UTARA", 216 | }, 217 | { 218 | idKab: "1221", 219 | idProv: "12", 220 | name: "KAB. PADANG LAWAS", 221 | }, 222 | { 223 | idKab: "1222", 224 | idProv: "12", 225 | name: "KAB. LABUHANBATU SELATAN", 226 | }, 227 | { 228 | idKab: "1223", 229 | idProv: "12", 230 | name: "KAB. LABUHANBATU UTARA", 231 | }, 232 | { 233 | idKab: "1224", 234 | idProv: "12", 235 | name: "KAB. NIAS UTARA", 236 | }, 237 | { 238 | idKab: "1225", 239 | idProv: "12", 240 | name: "KAB. NIAS BARAT", 241 | }, 242 | { 243 | idKab: "1271", 244 | idProv: "12", 245 | name: "KOTA MEDAN", 246 | }, 247 | { 248 | idKab: "1272", 249 | idProv: "12", 250 | name: "KOTA PEMATANGSIANTAR", 251 | }, 252 | { 253 | idKab: "1273", 254 | idProv: "12", 255 | name: "KOTA SIBOLGA", 256 | }, 257 | { 258 | idKab: "1274", 259 | idProv: "12", 260 | name: "KOTA TANJUNG BALAI", 261 | }, 262 | { 263 | idKab: "1275", 264 | idProv: "12", 265 | name: "KOTA BINJAI", 266 | }, 267 | { 268 | idKab: "1276", 269 | idProv: "12", 270 | name: "KOTA TEBING TINGGI", 271 | }, 272 | { 273 | idKab: "1277", 274 | idProv: "12", 275 | name: "KOTA PADANG SIDEMPUAN", 276 | }, 277 | { 278 | idKab: "1278", 279 | idProv: "12", 280 | name: "KOTA GUNUNGSITOLI", 281 | }, 282 | { 283 | idKab: "1301", 284 | idProv: "13", 285 | name: "KAB. PESISIR SELATAN", 286 | }, 287 | { 288 | idKab: "1302", 289 | idProv: "13", 290 | name: "KAB. SOLOK", 291 | }, 292 | { 293 | idKab: "1303", 294 | idProv: "13", 295 | name: "KAB. SIJUNJUNG", 296 | }, 297 | { 298 | idKab: "1304", 299 | idProv: "13", 300 | name: "KAB. TANAH DATAR", 301 | }, 302 | { 303 | idKab: "1305", 304 | idProv: "13", 305 | name: "KAB. PADANG PARIAMAN", 306 | }, 307 | { 308 | idKab: "1306", 309 | idProv: "13", 310 | name: "KAB. AGAM", 311 | }, 312 | { 313 | idKab: "1307", 314 | idProv: "13", 315 | name: "KAB. LIMA PULUH KOTA", 316 | }, 317 | { 318 | idKab: "1308", 319 | idProv: "13", 320 | name: "KAB. PASAMAN", 321 | }, 322 | { 323 | idKab: "1309", 324 | idProv: "13", 325 | name: "KAB. KEPULAUAN MENTAWAI", 326 | }, 327 | { 328 | idKab: "1310", 329 | idProv: "13", 330 | name: "KAB. DHARMASRAYA", 331 | }, 332 | { 333 | idKab: "1311", 334 | idProv: "13", 335 | name: "KAB. SOLOK SELATAN", 336 | }, 337 | { 338 | idKab: "1312", 339 | idProv: "13", 340 | name: "KAB. PASAMAN BARAT", 341 | }, 342 | { 343 | idKab: "1371", 344 | idProv: "13", 345 | name: "KOTA PADANG", 346 | }, 347 | { 348 | idKab: "1372", 349 | idProv: "13", 350 | name: "KOTA SOLOK", 351 | }, 352 | { 353 | idKab: "1373", 354 | idProv: "13", 355 | name: "KOTA SAWAHLUNTO", 356 | }, 357 | { 358 | idKab: "1374", 359 | idProv: "13", 360 | name: "KOTA PADANG PANJANG", 361 | }, 362 | { 363 | idKab: "1375", 364 | idProv: "13", 365 | name: "KOTA BUKITTINGGI", 366 | }, 367 | { 368 | idKab: "1376", 369 | idProv: "13", 370 | name: "KOTA PAYAKUMBUH", 371 | }, 372 | { 373 | idKab: "1377", 374 | idProv: "13", 375 | name: "KOTA PARIAMAN", 376 | }, 377 | { 378 | idKab: "1401", 379 | idProv: "14", 380 | name: "KAB. KAMPAR", 381 | }, 382 | { 383 | idKab: "1402", 384 | idProv: "14", 385 | name: "KAB. INDRAGIRI HULU", 386 | }, 387 | { 388 | idKab: "1403", 389 | idProv: "14", 390 | name: "KAB. BENGKALIS", 391 | }, 392 | { 393 | idKab: "1404", 394 | idProv: "14", 395 | name: "KAB. INDRAGIRI HILIR", 396 | }, 397 | { 398 | idKab: "1405", 399 | idProv: "14", 400 | name: "KAB. PELALAWAN", 401 | }, 402 | { 403 | idKab: "1406", 404 | idProv: "14", 405 | name: "KAB. ROKAN HULU", 406 | }, 407 | { 408 | idKab: "1407", 409 | idProv: "14", 410 | name: "KAB. ROKAN HILIR", 411 | }, 412 | { 413 | idKab: "1408", 414 | idProv: "14", 415 | name: "KAB. SIAK", 416 | }, 417 | { 418 | idKab: "1409", 419 | idProv: "14", 420 | name: "KAB. KUANTAN SINGINGI", 421 | }, 422 | { 423 | idKab: "1410", 424 | idProv: "14", 425 | name: "KAB. KEPULAUAN MERANTI", 426 | }, 427 | { 428 | idKab: "1471", 429 | idProv: "14", 430 | name: "KOTA PEKANBARU", 431 | }, 432 | { 433 | idKab: "1472", 434 | idProv: "14", 435 | name: "KOTA DUMAI", 436 | }, 437 | { 438 | idKab: "1501", 439 | idProv: "15", 440 | name: "KAB. KERINCI", 441 | }, 442 | { 443 | idKab: "1502", 444 | idProv: "15", 445 | name: "KAB. MERANGIN", 446 | }, 447 | { 448 | idKab: "1503", 449 | idProv: "15", 450 | name: "KAB. SAROLANGUN", 451 | }, 452 | { 453 | idKab: "1504", 454 | idProv: "15", 455 | name: "KAB. BATANGHARI", 456 | }, 457 | { 458 | idKab: "1505", 459 | idProv: "15", 460 | name: "KAB. MUARO JAMBI", 461 | }, 462 | { 463 | idKab: "1506", 464 | idProv: "15", 465 | name: "KAB. TANJUNG JABUNG BARAT", 466 | }, 467 | { 468 | idKab: "1507", 469 | idProv: "15", 470 | name: "KAB. TANJUNG JABUNG TIMUR", 471 | }, 472 | { 473 | idKab: "1508", 474 | idProv: "15", 475 | name: "KAB. BUNGO", 476 | }, 477 | { 478 | idKab: "1509", 479 | idProv: "15", 480 | name: "KAB. TEBO", 481 | }, 482 | { 483 | idKab: "1571", 484 | idProv: "15", 485 | name: "KOTA JAMBI", 486 | }, 487 | { 488 | idKab: "1572", 489 | idProv: "15", 490 | name: "KOTA SUNGAI PENUH", 491 | }, 492 | { 493 | idKab: "1601", 494 | idProv: "16", 495 | name: "KAB. OGAN KOMERING ULU", 496 | }, 497 | { 498 | idKab: "1602", 499 | idProv: "16", 500 | name: "KAB. OGAN KOMERING ILIR", 501 | }, 502 | { 503 | idKab: "1603", 504 | idProv: "16", 505 | name: "KAB. MUARA ENIM", 506 | }, 507 | { 508 | idKab: "1604", 509 | idProv: "16", 510 | name: "KAB. LAHAT", 511 | }, 512 | { 513 | idKab: "1605", 514 | idProv: "16", 515 | name: "KAB. MUSI RAWAS", 516 | }, 517 | { 518 | idKab: "1606", 519 | idProv: "16", 520 | name: "KAB. MUSI BANYUASIN", 521 | }, 522 | { 523 | idKab: "1607", 524 | idProv: "16", 525 | name: "KAB. BANYUASIN", 526 | }, 527 | { 528 | idKab: "1608", 529 | idProv: "16", 530 | name: "KAB. OGAN KOMERING ULU TIMUR", 531 | }, 532 | { 533 | idKab: "1609", 534 | idProv: "16", 535 | name: "KAB. OGAN KOMERING ULU SELATAN", 536 | }, 537 | { 538 | idKab: "1610", 539 | idProv: "16", 540 | name: "KAB. OGAN ILIR", 541 | }, 542 | { 543 | idKab: "1611", 544 | idProv: "16", 545 | name: "KAB. EMPAT LAWANG", 546 | }, 547 | { 548 | idKab: "1612", 549 | idProv: "16", 550 | name: "KAB. PENUKAL ABAB LEMATANG ILIR", 551 | }, 552 | { 553 | idKab: "1613", 554 | idProv: "16", 555 | name: "KAB. MUSI RAWAS UTARA", 556 | }, 557 | { 558 | idKab: "1671", 559 | idProv: "16", 560 | name: "KOTA PALEMBANG", 561 | }, 562 | { 563 | idKab: "1672", 564 | idProv: "16", 565 | name: "KOTA PAGAR ALAM", 566 | }, 567 | { 568 | idKab: "1673", 569 | idProv: "16", 570 | name: "KOTA LUBUK LINGGAU", 571 | }, 572 | { 573 | idKab: "1674", 574 | idProv: "16", 575 | name: "KOTA PRABUMULIH", 576 | }, 577 | { 578 | idKab: "1701", 579 | idProv: "17", 580 | name: "KAB. BENGKULU SELATAN", 581 | }, 582 | { 583 | idKab: "1702", 584 | idProv: "17", 585 | name: "KAB. REJANG LEBONG", 586 | }, 587 | { 588 | idKab: "1703", 589 | idProv: "17", 590 | name: "KAB. BENGKULU UTARA", 591 | }, 592 | { 593 | idKab: "1704", 594 | idProv: "17", 595 | name: "KAB. KAUR", 596 | }, 597 | { 598 | idKab: "1705", 599 | idProv: "17", 600 | name: "KAB. SELUMA", 601 | }, 602 | { 603 | idKab: "1706", 604 | idProv: "17", 605 | name: "KAB. MUKO MUKO", 606 | }, 607 | { 608 | idKab: "1707", 609 | idProv: "17", 610 | name: "KAB. LEBONG", 611 | }, 612 | { 613 | idKab: "1708", 614 | idProv: "17", 615 | name: "KAB. KEPAHIANG", 616 | }, 617 | { 618 | idKab: "1709", 619 | idProv: "17", 620 | name: "KAB. BENGKULU TENGAH", 621 | }, 622 | { 623 | idKab: "1771", 624 | idProv: "17", 625 | name: "KOTA BENGKULU", 626 | }, 627 | { 628 | idKab: "1801", 629 | idProv: "18", 630 | name: "KAB. LAMPUNG SELATAN", 631 | }, 632 | { 633 | idKab: "1802", 634 | idProv: "18", 635 | name: "KAB. LAMPUNG TENGAH", 636 | }, 637 | { 638 | idKab: "1803", 639 | idProv: "18", 640 | name: "KAB. LAMPUNG UTARA", 641 | }, 642 | { 643 | idKab: "1804", 644 | idProv: "18", 645 | name: "KAB. LAMPUNG BARAT", 646 | }, 647 | { 648 | idKab: "1805", 649 | idProv: "18", 650 | name: "KAB. TULANG BAWANG", 651 | }, 652 | { 653 | idKab: "1806", 654 | idProv: "18", 655 | name: "KAB. TANGGAMUS", 656 | }, 657 | { 658 | idKab: "1807", 659 | idProv: "18", 660 | name: "KAB. LAMPUNG TIMUR", 661 | }, 662 | { 663 | idKab: "1808", 664 | idProv: "18", 665 | name: "KAB. WAY KANAN", 666 | }, 667 | { 668 | idKab: "1809", 669 | idProv: "18", 670 | name: "KAB. PESAWARAN", 671 | }, 672 | { 673 | idKab: "1810", 674 | idProv: "18", 675 | name: "KAB. PRINGSEWU", 676 | }, 677 | { 678 | idKab: "1811", 679 | idProv: "18", 680 | name: "KAB. MESUJI", 681 | }, 682 | { 683 | idKab: "1812", 684 | idProv: "18", 685 | name: "KAB. TULANG BAWANG BARAT", 686 | }, 687 | { 688 | idKab: "1813", 689 | idProv: "18", 690 | name: "KAB. PESISIR BARAT", 691 | }, 692 | { 693 | idKab: "1871", 694 | idProv: "18", 695 | name: "KOTA BANDAR LAMPUNG", 696 | }, 697 | { 698 | idKab: "1872", 699 | idProv: "18", 700 | name: "KOTA METRO", 701 | }, 702 | { 703 | idKab: "1901", 704 | idProv: "19", 705 | name: "KAB. BANGKA", 706 | }, 707 | { 708 | idKab: "1902", 709 | idProv: "19", 710 | name: "KAB. BELITUNG", 711 | }, 712 | { 713 | idKab: "1903", 714 | idProv: "19", 715 | name: "KAB. BANGKA SELATAN", 716 | }, 717 | { 718 | idKab: "1904", 719 | idProv: "19", 720 | name: "KAB. BANGKA TENGAH", 721 | }, 722 | { 723 | idKab: "1905", 724 | idProv: "19", 725 | name: "KAB. BANGKA BARAT", 726 | }, 727 | { 728 | idKab: "1906", 729 | idProv: "19", 730 | name: "KAB. BELITUNG TIMUR", 731 | }, 732 | { 733 | idKab: "1971", 734 | idProv: "19", 735 | name: "KOTA PANGKAL PINANG", 736 | }, 737 | { 738 | idKab: "2101", 739 | idProv: "21", 740 | name: "KAB. BINTAN", 741 | }, 742 | { 743 | idKab: "2102", 744 | idProv: "21", 745 | name: "KAB. KARIMUN", 746 | }, 747 | { 748 | idKab: "2103", 749 | idProv: "21", 750 | name: "KAB. NATUNA", 751 | }, 752 | { 753 | idKab: "2104", 754 | idProv: "21", 755 | name: "KAB. LINGGA", 756 | }, 757 | { 758 | idKab: "2105", 759 | idProv: "21", 760 | name: "KAB. KEPULAUAN ANAMBAS", 761 | }, 762 | { 763 | idKab: "2171", 764 | idProv: "21", 765 | name: "KOTA BATAM", 766 | }, 767 | { 768 | idKab: "2172", 769 | idProv: "21", 770 | name: "KOTA TANJUNG PINANG", 771 | }, 772 | { 773 | idKab: "3101", 774 | idProv: "31", 775 | name: "KAB. ADM. KEP. SERIBU", 776 | }, 777 | { 778 | idKab: "3171", 779 | idProv: "31", 780 | name: "KOTA ADM. JAKARTA PUSAT", 781 | }, 782 | { 783 | idKab: "3172", 784 | idProv: "31", 785 | name: "KOTA ADM. JAKARTA UTARA", 786 | }, 787 | { 788 | idKab: "3173", 789 | idProv: "31", 790 | name: "KOTA ADM. JAKARTA BARAT", 791 | }, 792 | { 793 | idKab: "3174", 794 | idProv: "31", 795 | name: "KOTA ADM. JAKARTA SELATAN", 796 | }, 797 | { 798 | idKab: "3175", 799 | idProv: "31", 800 | name: "KOTA ADM. JAKARTA TIMUR", 801 | }, 802 | { 803 | idKab: "3201", 804 | idProv: "32", 805 | name: "KAB. BOGOR", 806 | }, 807 | { 808 | idKab: "3202", 809 | idProv: "32", 810 | name: "KAB. SUKABUMI", 811 | }, 812 | { 813 | idKab: "3203", 814 | idProv: "32", 815 | name: "KAB. CIANJUR", 816 | }, 817 | { 818 | idKab: "3204", 819 | idProv: "32", 820 | name: "KAB. BANDUNG", 821 | }, 822 | { 823 | idKab: "3205", 824 | idProv: "32", 825 | name: "KAB. GARUT", 826 | }, 827 | { 828 | idKab: "3206", 829 | idProv: "32", 830 | name: "KAB. TASIKMALAYA", 831 | }, 832 | { 833 | idKab: "3207", 834 | idProv: "32", 835 | name: "KAB. CIAMIS", 836 | }, 837 | { 838 | idKab: "3208", 839 | idProv: "32", 840 | name: "KAB. KUNINGAN", 841 | }, 842 | { 843 | idKab: "3209", 844 | idProv: "32", 845 | name: "KAB. CIREBON", 846 | }, 847 | { 848 | idKab: "3210", 849 | idProv: "32", 850 | name: "KAB. MAJALENGKA", 851 | }, 852 | { 853 | idKab: "3211", 854 | idProv: "32", 855 | name: "KAB. SUMEDANG", 856 | }, 857 | { 858 | idKab: "3212", 859 | idProv: "32", 860 | name: "KAB. INDRAMAYU", 861 | }, 862 | { 863 | idKab: "3213", 864 | idProv: "32", 865 | name: "KAB. SUBANG", 866 | }, 867 | { 868 | idKab: "3214", 869 | idProv: "32", 870 | name: "KAB. PURWAKARTA", 871 | }, 872 | { 873 | idKab: "3215", 874 | idProv: "32", 875 | name: "KAB. KARAWANG", 876 | }, 877 | { 878 | idKab: "3216", 879 | idProv: "32", 880 | name: "KAB. BEKASI", 881 | }, 882 | { 883 | idKab: "3217", 884 | idProv: "32", 885 | name: "KAB. BANDUNG BARAT", 886 | }, 887 | { 888 | idKab: "3218", 889 | idProv: "32", 890 | name: "KAB. PANGANDARAN", 891 | }, 892 | { 893 | idKab: "3271", 894 | idProv: "32", 895 | name: "KOTA BOGOR", 896 | }, 897 | { 898 | idKab: "3272", 899 | idProv: "32", 900 | name: "KOTA SUKABUMI", 901 | }, 902 | { 903 | idKab: "3273", 904 | idProv: "32", 905 | name: "KOTA BANDUNG", 906 | }, 907 | { 908 | idKab: "3274", 909 | idProv: "32", 910 | name: "KOTA CIREBON", 911 | }, 912 | { 913 | idKab: "3275", 914 | idProv: "32", 915 | name: "KOTA BEKASI", 916 | }, 917 | { 918 | idKab: "3276", 919 | idProv: "32", 920 | name: "KOTA DEPOK", 921 | }, 922 | { 923 | idKab: "3277", 924 | idProv: "32", 925 | name: "KOTA CIMAHI", 926 | }, 927 | { 928 | idKab: "3278", 929 | idProv: "32", 930 | name: "KOTA TASIKMALAYA", 931 | }, 932 | { 933 | idKab: "3279", 934 | idProv: "32", 935 | name: "KOTA BANJAR", 936 | }, 937 | { 938 | idKab: "3301", 939 | idProv: "33", 940 | name: "KAB. CILACAP", 941 | }, 942 | { 943 | idKab: "3302", 944 | idProv: "33", 945 | name: "KAB. BANYUMAS", 946 | }, 947 | { 948 | idKab: "3303", 949 | idProv: "33", 950 | name: "KAB. PURBALINGGA", 951 | }, 952 | { 953 | idKab: "3304", 954 | idProv: "33", 955 | name: "KAB. BANJARNEGARA", 956 | }, 957 | { 958 | idKab: "3305", 959 | idProv: "33", 960 | name: "KAB. KEBUMEN", 961 | }, 962 | { 963 | idKab: "3306", 964 | idProv: "33", 965 | name: "KAB. PURWOREJO", 966 | }, 967 | { 968 | idKab: "3307", 969 | idProv: "33", 970 | name: "KAB. WONOSOBO", 971 | }, 972 | { 973 | idKab: "3308", 974 | idProv: "33", 975 | name: "KAB. MAGELANG", 976 | }, 977 | { 978 | idKab: "3309", 979 | idProv: "33", 980 | name: "KAB. BOYOLALI", 981 | }, 982 | { 983 | idKab: "3310", 984 | idProv: "33", 985 | name: "KAB. KLATEN", 986 | }, 987 | { 988 | idKab: "3311", 989 | idProv: "33", 990 | name: "KAB. SUKOHARJO", 991 | }, 992 | { 993 | idKab: "3312", 994 | idProv: "33", 995 | name: "KAB. WONOGIRI", 996 | }, 997 | { 998 | idKab: "3313", 999 | idProv: "33", 1000 | name: "KAB. KARANGANYAR", 1001 | }, 1002 | { 1003 | idKab: "3314", 1004 | idProv: "33", 1005 | name: "KAB. SRAGEN", 1006 | }, 1007 | { 1008 | idKab: "3315", 1009 | idProv: "33", 1010 | name: "KAB. GROBOGAN", 1011 | }, 1012 | { 1013 | idKab: "3316", 1014 | idProv: "33", 1015 | name: "KAB. BLORA", 1016 | }, 1017 | { 1018 | idKab: "3317", 1019 | idProv: "33", 1020 | name: "KAB. REMBANG", 1021 | }, 1022 | { 1023 | idKab: "3318", 1024 | idProv: "33", 1025 | name: "KAB. PATI", 1026 | }, 1027 | { 1028 | idKab: "3319", 1029 | idProv: "33", 1030 | name: "KAB. KUDUS", 1031 | }, 1032 | { 1033 | idKab: "3320", 1034 | idProv: "33", 1035 | name: "KAB. JEPARA", 1036 | }, 1037 | { 1038 | idKab: "3321", 1039 | idProv: "33", 1040 | name: "KAB. DEMAK", 1041 | }, 1042 | { 1043 | idKab: "3322", 1044 | idProv: "33", 1045 | name: "KAB. SEMARANG", 1046 | }, 1047 | { 1048 | idKab: "3323", 1049 | idProv: "33", 1050 | name: "KAB. TEMANGGUNG", 1051 | }, 1052 | { 1053 | idKab: "3324", 1054 | idProv: "33", 1055 | name: "KAB. KENDAL", 1056 | }, 1057 | { 1058 | idKab: "3325", 1059 | idProv: "33", 1060 | name: "KAB. BATANG", 1061 | }, 1062 | { 1063 | idKab: "3326", 1064 | idProv: "33", 1065 | name: "KAB. PEKALONGAN", 1066 | }, 1067 | { 1068 | idKab: "3327", 1069 | idProv: "33", 1070 | name: "KAB. PEMALANG", 1071 | }, 1072 | { 1073 | idKab: "3328", 1074 | idProv: "33", 1075 | name: "KAB. TEGAL", 1076 | }, 1077 | { 1078 | idKab: "3329", 1079 | idProv: "33", 1080 | name: "KAB. BREBES", 1081 | }, 1082 | { 1083 | idKab: "3371", 1084 | idProv: "33", 1085 | name: "KOTA MAGELANG", 1086 | }, 1087 | { 1088 | idKab: "3372", 1089 | idProv: "33", 1090 | name: "KOTA SURAKARTA", 1091 | }, 1092 | { 1093 | idKab: "3373", 1094 | idProv: "33", 1095 | name: "KOTA SALATIGA", 1096 | }, 1097 | { 1098 | idKab: "3374", 1099 | idProv: "33", 1100 | name: "KOTA SEMARANG", 1101 | }, 1102 | { 1103 | idKab: "3375", 1104 | idProv: "33", 1105 | name: "KOTA PEKALONGAN", 1106 | }, 1107 | { 1108 | idKab: "3376", 1109 | idProv: "33", 1110 | name: "KOTA TEGAL", 1111 | }, 1112 | { 1113 | idKab: "3401", 1114 | idProv: "34", 1115 | name: "KAB. KULON PROGO", 1116 | }, 1117 | { 1118 | idKab: "3402", 1119 | idProv: "34", 1120 | name: "KAB. BANTUL", 1121 | }, 1122 | { 1123 | idKab: "3403", 1124 | idProv: "34", 1125 | name: "KAB. GUNUNGKIDUL", 1126 | }, 1127 | { 1128 | idKab: "3404", 1129 | idProv: "34", 1130 | name: "KAB. SLEMAN", 1131 | }, 1132 | { 1133 | idKab: "3471", 1134 | idProv: "34", 1135 | name: "KOTA YOGYAKARTA", 1136 | }, 1137 | { 1138 | idKab: "3501", 1139 | idProv: "35", 1140 | name: "KAB. PACITAN", 1141 | }, 1142 | { 1143 | idKab: "3502", 1144 | idProv: "35", 1145 | name: "KAB. PONOROGO", 1146 | }, 1147 | { 1148 | idKab: "3503", 1149 | idProv: "35", 1150 | name: "KAB. TRENGGALEK", 1151 | }, 1152 | { 1153 | idKab: "3504", 1154 | idProv: "35", 1155 | name: "KAB. TULUNGAGUNG", 1156 | }, 1157 | { 1158 | idKab: "3505", 1159 | idProv: "35", 1160 | name: "KAB. BLITAR", 1161 | }, 1162 | { 1163 | idKab: "3506", 1164 | idProv: "35", 1165 | name: "KAB. KEDIRI", 1166 | }, 1167 | { 1168 | idKab: "3507", 1169 | idProv: "35", 1170 | name: "KAB. MALANG", 1171 | }, 1172 | { 1173 | idKab: "3508", 1174 | idProv: "35", 1175 | name: "KAB. LUMAJANG", 1176 | }, 1177 | { 1178 | idKab: "3509", 1179 | idProv: "35", 1180 | name: "KAB. JEMBER", 1181 | }, 1182 | { 1183 | idKab: "3510", 1184 | idProv: "35", 1185 | name: "KAB. BANYUWANGI", 1186 | }, 1187 | { 1188 | idKab: "3511", 1189 | idProv: "35", 1190 | name: "KAB. BONDOWOSO", 1191 | }, 1192 | { 1193 | idKab: "3512", 1194 | idProv: "35", 1195 | name: "KAB. SITUBONDO", 1196 | }, 1197 | { 1198 | idKab: "3513", 1199 | idProv: "35", 1200 | name: "KAB. PROBOLINGGO", 1201 | }, 1202 | { 1203 | idKab: "3514", 1204 | idProv: "35", 1205 | name: "KAB. PASURUAN", 1206 | }, 1207 | { 1208 | idKab: "3515", 1209 | idProv: "35", 1210 | name: "KAB. SIDOARJO", 1211 | }, 1212 | { 1213 | idKab: "3516", 1214 | idProv: "35", 1215 | name: "KAB. MOJOKERTO", 1216 | }, 1217 | { 1218 | idKab: "3517", 1219 | idProv: "35", 1220 | name: "KAB. JOMBANG", 1221 | }, 1222 | { 1223 | idKab: "3518", 1224 | idProv: "35", 1225 | name: "KAB. NGANJUK", 1226 | }, 1227 | { 1228 | idKab: "3519", 1229 | idProv: "35", 1230 | name: "KAB. MADIUN", 1231 | }, 1232 | { 1233 | idKab: "3520", 1234 | idProv: "35", 1235 | name: "KAB. MAGETAN", 1236 | }, 1237 | { 1238 | idKab: "3521", 1239 | idProv: "35", 1240 | name: "KAB. NGAWI", 1241 | }, 1242 | { 1243 | idKab: "3522", 1244 | idProv: "35", 1245 | name: "KAB. BOJONEGORO", 1246 | }, 1247 | { 1248 | idKab: "3523", 1249 | idProv: "35", 1250 | name: "KAB. TUBAN", 1251 | }, 1252 | { 1253 | idKab: "3524", 1254 | idProv: "35", 1255 | name: "KAB. LAMONGAN", 1256 | }, 1257 | { 1258 | idKab: "3525", 1259 | idProv: "35", 1260 | name: "KAB. GRESIK", 1261 | }, 1262 | { 1263 | idKab: "3526", 1264 | idProv: "35", 1265 | name: "KAB. BANGKALAN", 1266 | }, 1267 | { 1268 | idKab: "3527", 1269 | idProv: "35", 1270 | name: "KAB. SAMPANG", 1271 | }, 1272 | { 1273 | idKab: "3528", 1274 | idProv: "35", 1275 | name: "KAB. PAMEKASAN", 1276 | }, 1277 | { 1278 | idKab: "3529", 1279 | idProv: "35", 1280 | name: "KAB. SUMENEP", 1281 | }, 1282 | { 1283 | idKab: "3571", 1284 | idProv: "35", 1285 | name: "KOTA KEDIRI", 1286 | }, 1287 | { 1288 | idKab: "3572", 1289 | idProv: "35", 1290 | name: "KOTA BLITAR", 1291 | }, 1292 | { 1293 | idKab: "3573", 1294 | idProv: "35", 1295 | name: "KOTA MALANG", 1296 | }, 1297 | { 1298 | idKab: "3574", 1299 | idProv: "35", 1300 | name: "KOTA PROBOLINGGO", 1301 | }, 1302 | { 1303 | idKab: "3575", 1304 | idProv: "35", 1305 | name: "KOTA PASURUAN", 1306 | }, 1307 | { 1308 | idKab: "3576", 1309 | idProv: "35", 1310 | name: "KOTA MOJOKERTO", 1311 | }, 1312 | { 1313 | idKab: "3577", 1314 | idProv: "35", 1315 | name: "KOTA MADIUN", 1316 | }, 1317 | { 1318 | idKab: "3578", 1319 | idProv: "35", 1320 | name: "KOTA SURABAYA", 1321 | }, 1322 | { 1323 | idKab: "3579", 1324 | idProv: "35", 1325 | name: "KOTA BATU", 1326 | }, 1327 | { 1328 | idKab: "3601", 1329 | idProv: "36", 1330 | name: "KAB. PANDEGLANG", 1331 | }, 1332 | { 1333 | idKab: "3602", 1334 | idProv: "36", 1335 | name: "KAB. LEBAK", 1336 | }, 1337 | { 1338 | idKab: "3603", 1339 | idProv: "36", 1340 | name: "KAB. TANGERANG", 1341 | }, 1342 | { 1343 | idKab: "3604", 1344 | idProv: "36", 1345 | name: "KAB. SERANG", 1346 | }, 1347 | { 1348 | idKab: "3671", 1349 | idProv: "36", 1350 | name: "KOTA TANGERANG", 1351 | }, 1352 | { 1353 | idKab: "3672", 1354 | idProv: "36", 1355 | name: "KOTA CILEGON", 1356 | }, 1357 | { 1358 | idKab: "3673", 1359 | idProv: "36", 1360 | name: "KOTA SERANG", 1361 | }, 1362 | { 1363 | idKab: "3674", 1364 | idProv: "36", 1365 | name: "KOTA TANGERANG SELATAN", 1366 | }, 1367 | { 1368 | idKab: "5101", 1369 | idProv: "51", 1370 | name: "KAB. JEMBRANA", 1371 | }, 1372 | { 1373 | idKab: "5102", 1374 | idProv: "51", 1375 | name: "KAB. TABANAN", 1376 | }, 1377 | { 1378 | idKab: "5103", 1379 | idProv: "51", 1380 | name: "KAB. BADUNG", 1381 | }, 1382 | { 1383 | idKab: "5104", 1384 | idProv: "51", 1385 | name: "KAB. GIANYAR", 1386 | }, 1387 | { 1388 | idKab: "5105", 1389 | idProv: "51", 1390 | name: "KAB. KLUNGKUNG", 1391 | }, 1392 | { 1393 | idKab: "5106", 1394 | idProv: "51", 1395 | name: "KAB. BANGLI", 1396 | }, 1397 | { 1398 | idKab: "5107", 1399 | idProv: "51", 1400 | name: "KAB. KARANGASEM", 1401 | }, 1402 | { 1403 | idKab: "5108", 1404 | idProv: "51", 1405 | name: "KAB. BULELENG", 1406 | }, 1407 | { 1408 | idKab: "5171", 1409 | idProv: "51", 1410 | name: "KOTA DENPASAR", 1411 | }, 1412 | { 1413 | idKab: "5201", 1414 | idProv: "52", 1415 | name: "KAB. LOMBOK BARAT", 1416 | }, 1417 | { 1418 | idKab: "5202", 1419 | idProv: "52", 1420 | name: "KAB. LOMBOK TENGAH", 1421 | }, 1422 | { 1423 | idKab: "5203", 1424 | idProv: "52", 1425 | name: "KAB. LOMBOK TIMUR", 1426 | }, 1427 | { 1428 | idKab: "5204", 1429 | idProv: "52", 1430 | name: "KAB. SUMBAWA", 1431 | }, 1432 | { 1433 | idKab: "5205", 1434 | idProv: "52", 1435 | name: "KAB. DOMPU", 1436 | }, 1437 | { 1438 | idKab: "5206", 1439 | idProv: "52", 1440 | name: "KAB. BIMA", 1441 | }, 1442 | { 1443 | idKab: "5207", 1444 | idProv: "52", 1445 | name: "KAB. SUMBAWA BARAT", 1446 | }, 1447 | { 1448 | idKab: "5208", 1449 | idProv: "52", 1450 | name: "KAB. LOMBOK UTARA", 1451 | }, 1452 | { 1453 | idKab: "5271", 1454 | idProv: "52", 1455 | name: "KOTA MATARAM", 1456 | }, 1457 | { 1458 | idKab: "5272", 1459 | idProv: "52", 1460 | name: "KOTA BIMA", 1461 | }, 1462 | { 1463 | idKab: "5301", 1464 | idProv: "53", 1465 | name: "KAB. KUPANG", 1466 | }, 1467 | { 1468 | idKab: "5302", 1469 | idProv: "53", 1470 | name: "KAB TIMOR TENGAH SELATAN", 1471 | }, 1472 | { 1473 | idKab: "5303", 1474 | idProv: "53", 1475 | name: "KAB. TIMOR TENGAH UTARA", 1476 | }, 1477 | { 1478 | idKab: "5304", 1479 | idProv: "53", 1480 | name: "KAB. BELU", 1481 | }, 1482 | { 1483 | idKab: "5305", 1484 | idProv: "53", 1485 | name: "KAB. ALOR", 1486 | }, 1487 | { 1488 | idKab: "5306", 1489 | idProv: "53", 1490 | name: "KAB. FLORES TIMUR", 1491 | }, 1492 | { 1493 | idKab: "5307", 1494 | idProv: "53", 1495 | name: "KAB. SIKKA", 1496 | }, 1497 | { 1498 | idKab: "5308", 1499 | idProv: "53", 1500 | name: "KAB. ENDE", 1501 | }, 1502 | { 1503 | idKab: "5309", 1504 | idProv: "53", 1505 | name: "KAB. NGADA", 1506 | }, 1507 | { 1508 | idKab: "5310", 1509 | idProv: "53", 1510 | name: "KAB. MANGGARAI", 1511 | }, 1512 | { 1513 | idKab: "5311", 1514 | idProv: "53", 1515 | name: "KAB. SUMBA TIMUR", 1516 | }, 1517 | { 1518 | idKab: "5312", 1519 | idProv: "53", 1520 | name: "KAB. SUMBA BARAT", 1521 | }, 1522 | { 1523 | idKab: "5313", 1524 | idProv: "53", 1525 | name: "KAB. LEMBATA", 1526 | }, 1527 | { 1528 | idKab: "5314", 1529 | idProv: "53", 1530 | name: "KAB. ROTE NDAO", 1531 | }, 1532 | { 1533 | idKab: "5315", 1534 | idProv: "53", 1535 | name: "KAB. MANGGARAI BARAT", 1536 | }, 1537 | { 1538 | idKab: "5316", 1539 | idProv: "53", 1540 | name: "KAB. NAGEKEO", 1541 | }, 1542 | { 1543 | idKab: "5317", 1544 | idProv: "53", 1545 | name: "KAB. SUMBA TENGAH", 1546 | }, 1547 | { 1548 | idKab: "5318", 1549 | idProv: "53", 1550 | name: "KAB. SUMBA BARAT DAYA", 1551 | }, 1552 | { 1553 | idKab: "5319", 1554 | idProv: "53", 1555 | name: "KAB. MANGGARAI TIMUR", 1556 | }, 1557 | { 1558 | idKab: "5320", 1559 | idProv: "53", 1560 | name: "KAB. SABU RAIJUA", 1561 | }, 1562 | { 1563 | idKab: "5321", 1564 | idProv: "53", 1565 | name: "KAB. MALAKA", 1566 | }, 1567 | { 1568 | idKab: "5371", 1569 | idProv: "53", 1570 | name: "KOTA KUPANG", 1571 | }, 1572 | { 1573 | idKab: "6101", 1574 | idProv: "61", 1575 | name: "KAB. SAMBAS", 1576 | }, 1577 | { 1578 | idKab: "6102", 1579 | idProv: "61", 1580 | name: "KAB. MEMPAWAH", 1581 | }, 1582 | { 1583 | idKab: "6103", 1584 | idProv: "61", 1585 | name: "KAB. SANGGAU", 1586 | }, 1587 | { 1588 | idKab: "6104", 1589 | idProv: "61", 1590 | name: "KAB. KETAPANG", 1591 | }, 1592 | { 1593 | idKab: "6105", 1594 | idProv: "61", 1595 | name: "KAB. SINTANG", 1596 | }, 1597 | { 1598 | idKab: "6106", 1599 | idProv: "61", 1600 | name: "KAB. KAPUAS HULU", 1601 | }, 1602 | { 1603 | idKab: "6107", 1604 | idProv: "61", 1605 | name: "KAB. BENGKAYANG", 1606 | }, 1607 | { 1608 | idKab: "6108", 1609 | idProv: "61", 1610 | name: "KAB. LANDAK", 1611 | }, 1612 | { 1613 | idKab: "6109", 1614 | idProv: "61", 1615 | name: "KAB. SEKADAU", 1616 | }, 1617 | { 1618 | idKab: "6110", 1619 | idProv: "61", 1620 | name: "KAB. MELAWI", 1621 | }, 1622 | { 1623 | idKab: "6111", 1624 | idProv: "61", 1625 | name: "KAB. KAYONG UTARA", 1626 | }, 1627 | { 1628 | idKab: "6112", 1629 | idProv: "61", 1630 | name: "KAB. KUBU RAYA", 1631 | }, 1632 | { 1633 | idKab: "6171", 1634 | idProv: "61", 1635 | name: "KOTA PONTIANAK", 1636 | }, 1637 | { 1638 | idKab: "6172", 1639 | idProv: "61", 1640 | name: "KOTA SINGKAWANG", 1641 | }, 1642 | { 1643 | idKab: "6201", 1644 | idProv: "62", 1645 | name: "KAB. KOTAWARINGIN BARAT", 1646 | }, 1647 | { 1648 | idKab: "6202", 1649 | idProv: "62", 1650 | name: "KAB. KOTAWARINGIN TIMUR", 1651 | }, 1652 | { 1653 | idKab: "6203", 1654 | idProv: "62", 1655 | name: "KAB. KAPUAS", 1656 | }, 1657 | { 1658 | idKab: "6204", 1659 | idProv: "62", 1660 | name: "KAB. BARITO SELATAN", 1661 | }, 1662 | { 1663 | idKab: "6205", 1664 | idProv: "62", 1665 | name: "KAB. BARITO UTARA", 1666 | }, 1667 | { 1668 | idKab: "6206", 1669 | idProv: "62", 1670 | name: "KAB. KATINGAN", 1671 | }, 1672 | { 1673 | idKab: "6207", 1674 | idProv: "62", 1675 | name: "KAB. SERUYAN", 1676 | }, 1677 | { 1678 | idKab: "6208", 1679 | idProv: "62", 1680 | name: "KAB. SUKAMARA", 1681 | }, 1682 | { 1683 | idKab: "6209", 1684 | idProv: "62", 1685 | name: "KAB. LAMANDAU", 1686 | }, 1687 | { 1688 | idKab: "6210", 1689 | idProv: "62", 1690 | name: "KAB. GUNUNG MAS", 1691 | }, 1692 | { 1693 | idKab: "6211", 1694 | idProv: "62", 1695 | name: "KAB. PULANG PISAU", 1696 | }, 1697 | { 1698 | idKab: "6212", 1699 | idProv: "62", 1700 | name: "KAB. MURUNG RAYA", 1701 | }, 1702 | { 1703 | idKab: "6213", 1704 | idProv: "62", 1705 | name: "KAB. BARITO TIMUR", 1706 | }, 1707 | { 1708 | idKab: "6271", 1709 | idProv: "62", 1710 | name: "KOTA PALANGKARAYA", 1711 | }, 1712 | { 1713 | idKab: "6301", 1714 | idProv: "63", 1715 | name: "KAB. TANAH LAUT", 1716 | }, 1717 | { 1718 | idKab: "6302", 1719 | idProv: "63", 1720 | name: "KAB. KOTABARU", 1721 | }, 1722 | { 1723 | idKab: "6303", 1724 | idProv: "63", 1725 | name: "KAB. BANJAR", 1726 | }, 1727 | { 1728 | idKab: "6304", 1729 | idProv: "63", 1730 | name: "KAB. BARITO KUALA", 1731 | }, 1732 | { 1733 | idKab: "6305", 1734 | idProv: "63", 1735 | name: "KAB. TAPIN", 1736 | }, 1737 | { 1738 | idKab: "6306", 1739 | idProv: "63", 1740 | name: "KAB. HULU SUNGAI SELATAN", 1741 | }, 1742 | { 1743 | idKab: "6307", 1744 | idProv: "63", 1745 | name: "KAB. HULU SUNGAI TENGAH", 1746 | }, 1747 | { 1748 | idKab: "6308", 1749 | idProv: "63", 1750 | name: "KAB. HULU SUNGAI UTARA", 1751 | }, 1752 | { 1753 | idKab: "6309", 1754 | idProv: "63", 1755 | name: "KAB. TABALONG", 1756 | }, 1757 | { 1758 | idKab: "6310", 1759 | idProv: "63", 1760 | name: "KAB. TANAH BUMBU", 1761 | }, 1762 | { 1763 | idKab: "6311", 1764 | idProv: "63", 1765 | name: "KAB. BALANGAN", 1766 | }, 1767 | { 1768 | idKab: "6371", 1769 | idProv: "63", 1770 | name: "KOTA BANJARMASIN", 1771 | }, 1772 | { 1773 | idKab: "6372", 1774 | idProv: "63", 1775 | name: "KOTA BANJARBARU", 1776 | }, 1777 | { 1778 | idKab: "6401", 1779 | idProv: "64", 1780 | name: "KAB. PASER", 1781 | }, 1782 | { 1783 | idKab: "6402", 1784 | idProv: "64", 1785 | name: "KAB. KUTAI KARTANEGARA", 1786 | }, 1787 | { 1788 | idKab: "6403", 1789 | idProv: "64", 1790 | name: "KAB. BERAU", 1791 | }, 1792 | { 1793 | idKab: "6407", 1794 | idProv: "64", 1795 | name: "KAB. KUTAI BARAT", 1796 | }, 1797 | { 1798 | idKab: "6408", 1799 | idProv: "64", 1800 | name: "KAB. KUTAI TIMUR", 1801 | }, 1802 | { 1803 | idKab: "6409", 1804 | idProv: "64", 1805 | name: "KAB. PENAJAM PASER UTARA", 1806 | }, 1807 | { 1808 | idKab: "6411", 1809 | idProv: "64", 1810 | name: "KAB. MAHAKAM ULU", 1811 | }, 1812 | { 1813 | idKab: "6471", 1814 | idProv: "64", 1815 | name: "KOTA BALIKPAPAN", 1816 | }, 1817 | { 1818 | idKab: "6472", 1819 | idProv: "64", 1820 | name: "KOTA SAMARINDA", 1821 | }, 1822 | { 1823 | idKab: "6474", 1824 | idProv: "64", 1825 | name: "KOTA BONTANG", 1826 | }, 1827 | { 1828 | idKab: "6501", 1829 | idProv: "65", 1830 | name: "KAB. BULUNGAN", 1831 | }, 1832 | { 1833 | idKab: "6502", 1834 | idProv: "65", 1835 | name: "KAB. MALINAU", 1836 | }, 1837 | { 1838 | idKab: "6503", 1839 | idProv: "65", 1840 | name: "KAB. NUNUKAN", 1841 | }, 1842 | { 1843 | idKab: "6504", 1844 | idProv: "65", 1845 | name: "KAB. TANA TIDUNG", 1846 | }, 1847 | { 1848 | idKab: "6571", 1849 | idProv: "65", 1850 | name: "KOTA TARAKAN", 1851 | }, 1852 | { 1853 | idKab: "7101", 1854 | idProv: "71", 1855 | name: "KAB. BOLAANG MONGONDOW", 1856 | }, 1857 | { 1858 | idKab: "7102", 1859 | idProv: "71", 1860 | name: "KAB. MINAHASA", 1861 | }, 1862 | { 1863 | idKab: "7103", 1864 | idProv: "71", 1865 | name: "KAB. KEPULAUAN SANGIHE", 1866 | }, 1867 | { 1868 | idKab: "7104", 1869 | idProv: "71", 1870 | name: "KAB. KEPULAUAN TALAUD", 1871 | }, 1872 | { 1873 | idKab: "7105", 1874 | idProv: "71", 1875 | name: "KAB. MINAHASA SELATAN", 1876 | }, 1877 | { 1878 | idKab: "7106", 1879 | idProv: "71", 1880 | name: "KAB. MINAHASA UTARA", 1881 | }, 1882 | { 1883 | idKab: "7107", 1884 | idProv: "71", 1885 | name: "KAB. MINAHASA TENGGARA", 1886 | }, 1887 | { 1888 | idKab: "7108", 1889 | idProv: "71", 1890 | name: "KAB. BOLAANG MONGONDOW UTARA", 1891 | }, 1892 | { 1893 | idKab: "7109", 1894 | idProv: "71", 1895 | name: "KAB. KEP. SIAU TAGULANDANG BIARO", 1896 | }, 1897 | { 1898 | idKab: "7110", 1899 | idProv: "71", 1900 | name: "KAB. BOLAANG MONGONDOW TIMUR", 1901 | }, 1902 | { 1903 | idKab: "7111", 1904 | idProv: "71", 1905 | name: "KAB. BOLAANG MONGONDOW SELATAN", 1906 | }, 1907 | { 1908 | idKab: "7171", 1909 | idProv: "71", 1910 | name: "KOTA MANADO", 1911 | }, 1912 | { 1913 | idKab: "7172", 1914 | idProv: "71", 1915 | name: "KOTA BITUNG", 1916 | }, 1917 | { 1918 | idKab: "7173", 1919 | idProv: "71", 1920 | name: "KOTA TOMOHON", 1921 | }, 1922 | { 1923 | idKab: "7174", 1924 | idProv: "71", 1925 | name: "KOTA KOTAMOBAGU", 1926 | }, 1927 | { 1928 | idKab: "7201", 1929 | idProv: "72", 1930 | name: "KAB. BANGGAI", 1931 | }, 1932 | { 1933 | idKab: "7202", 1934 | idProv: "72", 1935 | name: "KAB. POSO", 1936 | }, 1937 | { 1938 | idKab: "7203", 1939 | idProv: "72", 1940 | name: "KAB. DONGGALA", 1941 | }, 1942 | { 1943 | idKab: "7204", 1944 | idProv: "72", 1945 | name: "KAB. TOLI TOLI", 1946 | }, 1947 | { 1948 | idKab: "7205", 1949 | idProv: "72", 1950 | name: "KAB. BUOL", 1951 | }, 1952 | { 1953 | idKab: "7206", 1954 | idProv: "72", 1955 | name: "KAB. MOROWALI", 1956 | }, 1957 | { 1958 | idKab: "7207", 1959 | idProv: "72", 1960 | name: "KAB. BANGGAI KEPULAUAN", 1961 | }, 1962 | { 1963 | idKab: "7208", 1964 | idProv: "72", 1965 | name: "KAB. PARIGI MOUTONG", 1966 | }, 1967 | { 1968 | idKab: "7209", 1969 | idProv: "72", 1970 | name: "KAB. TOJO UNA UNA", 1971 | }, 1972 | { 1973 | idKab: "7210", 1974 | idProv: "72", 1975 | name: "KAB. SIGI", 1976 | }, 1977 | { 1978 | idKab: "7211", 1979 | idProv: "72", 1980 | name: "KAB. BANGGAI LAUT", 1981 | }, 1982 | { 1983 | idKab: "7212", 1984 | idProv: "72", 1985 | name: "KAB. MOROWALI UTARA", 1986 | }, 1987 | { 1988 | idKab: "7271", 1989 | idProv: "72", 1990 | name: "KOTA PALU", 1991 | }, 1992 | { 1993 | idKab: "7301", 1994 | idProv: "73", 1995 | name: "KAB. KEPULAUAN SELAYAR", 1996 | }, 1997 | { 1998 | idKab: "7302", 1999 | idProv: "73", 2000 | name: "KAB. BULUKUMBA", 2001 | }, 2002 | { 2003 | idKab: "7303", 2004 | idProv: "73", 2005 | name: "KAB. BANTAENG", 2006 | }, 2007 | { 2008 | idKab: "7304", 2009 | idProv: "73", 2010 | name: "KAB. JENEPONTO", 2011 | }, 2012 | { 2013 | idKab: "7305", 2014 | idProv: "73", 2015 | name: "KAB. TAKALAR", 2016 | }, 2017 | { 2018 | idKab: "7306", 2019 | idProv: "73", 2020 | name: "KAB. GOWA", 2021 | }, 2022 | { 2023 | idKab: "7307", 2024 | idProv: "73", 2025 | name: "KAB. SINJAI", 2026 | }, 2027 | { 2028 | idKab: "7308", 2029 | idProv: "73", 2030 | name: "KAB. BONE", 2031 | }, 2032 | { 2033 | idKab: "7309", 2034 | idProv: "73", 2035 | name: "KAB. MAROS", 2036 | }, 2037 | { 2038 | idKab: "7310", 2039 | idProv: "73", 2040 | name: "KAB. PANGKAJENE KEPULAUAN", 2041 | }, 2042 | { 2043 | idKab: "7311", 2044 | idProv: "73", 2045 | name: "KAB. BARRU", 2046 | }, 2047 | { 2048 | idKab: "7312", 2049 | idProv: "73", 2050 | name: "KAB. SOPPENG", 2051 | }, 2052 | { 2053 | idKab: "7313", 2054 | idProv: "73", 2055 | name: "KAB. WAJO", 2056 | }, 2057 | { 2058 | idKab: "7314", 2059 | idProv: "73", 2060 | name: "KAB. SIDENRENG RAPPANG", 2061 | }, 2062 | { 2063 | idKab: "7315", 2064 | idProv: "73", 2065 | name: "KAB. PINRANG", 2066 | }, 2067 | { 2068 | idKab: "7316", 2069 | idProv: "73", 2070 | name: "KAB. ENREKANG", 2071 | }, 2072 | { 2073 | idKab: "7317", 2074 | idProv: "73", 2075 | name: "KAB. LUWU", 2076 | }, 2077 | { 2078 | idKab: "7318", 2079 | idProv: "73", 2080 | name: "KAB. TANA TORAJA", 2081 | }, 2082 | { 2083 | idKab: "7322", 2084 | idProv: "73", 2085 | name: "KAB. LUWU UTARA", 2086 | }, 2087 | { 2088 | idKab: "7324", 2089 | idProv: "73", 2090 | name: "KAB. LUWU TIMUR", 2091 | }, 2092 | { 2093 | idKab: "7326", 2094 | idProv: "73", 2095 | name: "KAB. TORAJA UTARA", 2096 | }, 2097 | { 2098 | idKab: "7371", 2099 | idProv: "73", 2100 | name: "KOTA MAKASSAR", 2101 | }, 2102 | { 2103 | idKab: "7372", 2104 | idProv: "73", 2105 | name: "KOTA PARE PARE", 2106 | }, 2107 | { 2108 | idKab: "7373", 2109 | idProv: "73", 2110 | name: "KOTA PALOPO", 2111 | }, 2112 | { 2113 | idKab: "7401", 2114 | idProv: "74", 2115 | name: "KAB. KOLAKA", 2116 | }, 2117 | { 2118 | idKab: "7402", 2119 | idProv: "74", 2120 | name: "KAB. KONAWE", 2121 | }, 2122 | { 2123 | idKab: "7403", 2124 | idProv: "74", 2125 | name: "KAB. MUNA", 2126 | }, 2127 | { 2128 | idKab: "7404", 2129 | idProv: "74", 2130 | name: "KAB. BUTON", 2131 | }, 2132 | { 2133 | idKab: "7405", 2134 | idProv: "74", 2135 | name: "KAB. KONAWE SELATAN", 2136 | }, 2137 | { 2138 | idKab: "7406", 2139 | idProv: "74", 2140 | name: "KAB. BOMBANA", 2141 | }, 2142 | { 2143 | idKab: "7407", 2144 | idProv: "74", 2145 | name: "KAB. WAKATOBI", 2146 | }, 2147 | { 2148 | idKab: "7408", 2149 | idProv: "74", 2150 | name: "KAB. KOLAKA UTARA", 2151 | }, 2152 | { 2153 | idKab: "7409", 2154 | idProv: "74", 2155 | name: "KAB. KONAWE UTARA", 2156 | }, 2157 | { 2158 | idKab: "7410", 2159 | idProv: "74", 2160 | name: "KAB. BUTON UTARA", 2161 | }, 2162 | { 2163 | idKab: "7411", 2164 | idProv: "74", 2165 | name: "KAB. KOLAKA TIMUR", 2166 | }, 2167 | { 2168 | idKab: "7412", 2169 | idProv: "74", 2170 | name: "KAB. KONAWE KEPULAUAN", 2171 | }, 2172 | { 2173 | idKab: "7413", 2174 | idProv: "74", 2175 | name: "KAB. MUNA BARAT", 2176 | }, 2177 | { 2178 | idKab: "7414", 2179 | idProv: "74", 2180 | name: "KAB. BUTON TENGAH", 2181 | }, 2182 | { 2183 | idKab: "7415", 2184 | idProv: "74", 2185 | name: "KAB. BUTON SELATAN", 2186 | }, 2187 | { 2188 | idKab: "7471", 2189 | idProv: "74", 2190 | name: "KOTA KENDARI", 2191 | }, 2192 | { 2193 | idKab: "7472", 2194 | idProv: "74", 2195 | name: "KOTA BAU BAU", 2196 | }, 2197 | { 2198 | idKab: "7501", 2199 | idProv: "75", 2200 | name: "KAB. GORONTALO", 2201 | }, 2202 | { 2203 | idKab: "7502", 2204 | idProv: "75", 2205 | name: "KAB. BOALEMO", 2206 | }, 2207 | { 2208 | idKab: "7503", 2209 | idProv: "75", 2210 | name: "KAB. BONE BOLANGO", 2211 | }, 2212 | { 2213 | idKab: "7504", 2214 | idProv: "75", 2215 | name: "KAB. PAHUWATO", 2216 | }, 2217 | { 2218 | idKab: "7505", 2219 | idProv: "75", 2220 | name: "KAB. GORONTALO UTARA", 2221 | }, 2222 | { 2223 | idKab: "7571", 2224 | idProv: "75", 2225 | name: "KOTA GORONTALO", 2226 | }, 2227 | { 2228 | idKab: "7601", 2229 | idProv: "76", 2230 | name: "KAB. PASANGKAYU", 2231 | }, 2232 | { 2233 | idKab: "7602", 2234 | idProv: "76", 2235 | name: "KAB. MAMUJU", 2236 | }, 2237 | { 2238 | idKab: "7603", 2239 | idProv: "76", 2240 | name: "KAB. MAMASA", 2241 | }, 2242 | { 2243 | idKab: "7604", 2244 | idProv: "76", 2245 | name: "KAB. POLEWALI MANDAR", 2246 | }, 2247 | { 2248 | idKab: "7605", 2249 | idProv: "76", 2250 | name: "KAB. MAJENE", 2251 | }, 2252 | { 2253 | idKab: "7606", 2254 | idProv: "76", 2255 | name: "KAB. MAMUJU TENGAH", 2256 | }, 2257 | { 2258 | idKab: "8101", 2259 | idProv: "81", 2260 | name: "KAB. MALUKU TENGAH", 2261 | }, 2262 | { 2263 | idKab: "8102", 2264 | idProv: "81", 2265 | name: "KAB. MALUKU TENGGARA", 2266 | }, 2267 | { 2268 | idKab: "8103", 2269 | idProv: "81", 2270 | name: "KAB. KEPULAUAN TANIMBAR", 2271 | }, 2272 | { 2273 | idKab: "8104", 2274 | idProv: "81", 2275 | name: "KAB. BURU", 2276 | }, 2277 | { 2278 | idKab: "8105", 2279 | idProv: "81", 2280 | name: "KAB. SERAM BAGIAN TIMUR", 2281 | }, 2282 | { 2283 | idKab: "8106", 2284 | idProv: "81", 2285 | name: "KAB. SERAM BAGIAN BARAT", 2286 | }, 2287 | { 2288 | idKab: "8107", 2289 | idProv: "81", 2290 | name: "KAB. KEPULAUAN ARU", 2291 | }, 2292 | { 2293 | idKab: "8108", 2294 | idProv: "81", 2295 | name: "KAB. MALUKU BARAT DAYA", 2296 | }, 2297 | { 2298 | idKab: "8109", 2299 | idProv: "81", 2300 | name: "KAB. BURU SELATAN", 2301 | }, 2302 | { 2303 | idKab: "8171", 2304 | idProv: "81", 2305 | name: "KOTA AMBON", 2306 | }, 2307 | { 2308 | idKab: "8172", 2309 | idProv: "81", 2310 | name: "KOTA TUAL", 2311 | }, 2312 | { 2313 | idKab: "8201", 2314 | idProv: "82", 2315 | name: "KAB. HALMAHERA BARAT", 2316 | }, 2317 | { 2318 | idKab: "8202", 2319 | idProv: "82", 2320 | name: "KAB. HALMAHERA TENGAH", 2321 | }, 2322 | { 2323 | idKab: "8203", 2324 | idProv: "82", 2325 | name: "KAB. HALMAHERA UTARA", 2326 | }, 2327 | { 2328 | idKab: "8204", 2329 | idProv: "82", 2330 | name: "KAB. HALMAHERA SELATAN", 2331 | }, 2332 | { 2333 | idKab: "8205", 2334 | idProv: "82", 2335 | name: "KAB. KEPULAUAN SULA", 2336 | }, 2337 | { 2338 | idKab: "8206", 2339 | idProv: "82", 2340 | name: "KAB. HALMAHERA TIMUR", 2341 | }, 2342 | { 2343 | idKab: "8207", 2344 | idProv: "82", 2345 | name: "KAB. PULAU MOROTAI", 2346 | }, 2347 | { 2348 | idKab: "8208", 2349 | idProv: "82", 2350 | name: "KAB. PULAU TALIABU", 2351 | }, 2352 | { 2353 | idKab: "8271", 2354 | idProv: "82", 2355 | name: "KOTA TERNATE", 2356 | }, 2357 | { 2358 | idKab: "8272", 2359 | idProv: "82", 2360 | name: "KOTA TIDORE KEPULAUAN", 2361 | }, 2362 | { 2363 | idKab: "9101", 2364 | idProv: "91", 2365 | name: "KAB. MERAUKE", 2366 | }, 2367 | { 2368 | idKab: "9102", 2369 | idProv: "91", 2370 | name: "KAB. JAYAWIJAYA", 2371 | }, 2372 | { 2373 | idKab: "9103", 2374 | idProv: "91", 2375 | name: "KAB. JAYAPURA", 2376 | }, 2377 | { 2378 | idKab: "9104", 2379 | idProv: "91", 2380 | name: "KAB. NABIRE", 2381 | }, 2382 | { 2383 | idKab: "9105", 2384 | idProv: "91", 2385 | name: "KAB. KEPULAUAN YAPEN", 2386 | }, 2387 | { 2388 | idKab: "9106", 2389 | idProv: "91", 2390 | name: "KAB. BIAK NUMFOR", 2391 | }, 2392 | { 2393 | idKab: "9107", 2394 | idProv: "91", 2395 | name: "KAB. PUNCAK JAYA", 2396 | }, 2397 | { 2398 | idKab: "9108", 2399 | idProv: "91", 2400 | name: "KAB. PANIAI", 2401 | }, 2402 | { 2403 | idKab: "9109", 2404 | idProv: "91", 2405 | name: "KAB. MIMIKA", 2406 | }, 2407 | { 2408 | idKab: "9110", 2409 | idProv: "91", 2410 | name: "KAB. SARMI", 2411 | }, 2412 | { 2413 | idKab: "9111", 2414 | idProv: "91", 2415 | name: "KAB. KEEROM", 2416 | }, 2417 | { 2418 | idKab: "9112", 2419 | idProv: "91", 2420 | name: "KAB PEGUNUNGAN BINTANG", 2421 | }, 2422 | { 2423 | idKab: "9113", 2424 | idProv: "91", 2425 | name: "KAB. YAHUKIMO", 2426 | }, 2427 | { 2428 | idKab: "9114", 2429 | idProv: "91", 2430 | name: "KAB. TOLIKARA", 2431 | }, 2432 | { 2433 | idKab: "9115", 2434 | idProv: "91", 2435 | name: "KAB. WAROPEN", 2436 | }, 2437 | { 2438 | idKab: "9116", 2439 | idProv: "91", 2440 | name: "KAB. BOVEN DIGOEL", 2441 | }, 2442 | { 2443 | idKab: "9117", 2444 | idProv: "91", 2445 | name: "KAB. MAPPI", 2446 | }, 2447 | { 2448 | idKab: "9118", 2449 | idProv: "91", 2450 | name: "KAB. ASMAT", 2451 | }, 2452 | { 2453 | idKab: "9119", 2454 | idProv: "91", 2455 | name: "KAB. SUPIORI", 2456 | }, 2457 | { 2458 | idKab: "9120", 2459 | idProv: "91", 2460 | name: "KAB. MAMBERAMO RAYA", 2461 | }, 2462 | { 2463 | idKab: "9121", 2464 | idProv: "91", 2465 | name: "KAB. MAMBERAMO TENGAH", 2466 | }, 2467 | { 2468 | idKab: "9122", 2469 | idProv: "91", 2470 | name: "KAB. YALIMO", 2471 | }, 2472 | { 2473 | idKab: "9123", 2474 | idProv: "91", 2475 | name: "KAB. LANNY JAYA", 2476 | }, 2477 | { 2478 | idKab: "9124", 2479 | idProv: "91", 2480 | name: "KAB. NDUGA", 2481 | }, 2482 | { 2483 | idKab: "9125", 2484 | idProv: "91", 2485 | name: "KAB. PUNCAK", 2486 | }, 2487 | { 2488 | idKab: "9126", 2489 | idProv: "91", 2490 | name: "KAB. DOGIYAI", 2491 | }, 2492 | { 2493 | idKab: "9127", 2494 | idProv: "91", 2495 | name: "KAB. INTAN JAYA", 2496 | }, 2497 | { 2498 | idKab: "9128", 2499 | idProv: "91", 2500 | name: "KAB. DEIYAI", 2501 | }, 2502 | { 2503 | idKab: "9171", 2504 | idProv: "91", 2505 | name: "KOTA JAYAPURA", 2506 | }, 2507 | { 2508 | idKab: "9201", 2509 | idProv: "92", 2510 | name: "KAB. SORONG", 2511 | }, 2512 | { 2513 | idKab: "9202", 2514 | idProv: "92", 2515 | name: "KAB. MANOKWARI", 2516 | }, 2517 | { 2518 | idKab: "9203", 2519 | idProv: "92", 2520 | name: "KAB. FAK FAK", 2521 | }, 2522 | { 2523 | idKab: "9204", 2524 | idProv: "92", 2525 | name: "KAB. SORONG SELATAN", 2526 | }, 2527 | { 2528 | idKab: "9205", 2529 | idProv: "92", 2530 | name: "KAB. RAJA AMPAT", 2531 | }, 2532 | { 2533 | idKab: "9206", 2534 | idProv: "92", 2535 | name: "KAB. TELUK BINTUNI", 2536 | }, 2537 | { 2538 | idKab: "9207", 2539 | idProv: "92", 2540 | name: "KAB. TELUK WONDAMA", 2541 | }, 2542 | { 2543 | idKab: "9208", 2544 | idProv: "92", 2545 | name: "KAB. KAIMANA", 2546 | }, 2547 | { 2548 | idKab: "9209", 2549 | idProv: "92", 2550 | name: "KAB. TAMBRAUW", 2551 | }, 2552 | { 2553 | idKab: "9210", 2554 | idProv: "92", 2555 | name: "KAB. MAYBRAT", 2556 | }, 2557 | { 2558 | idKab: "9211", 2559 | idProv: "92", 2560 | name: "KAB. MANOKWARI SELATAN", 2561 | }, 2562 | { 2563 | idKab: "9212", 2564 | idProv: "92", 2565 | name: "KAB. PEGUNUNGAN ARFAK", 2566 | }, 2567 | { 2568 | idKab: "9271", 2569 | idProv: "92", 2570 | name: "KOTA SORONG", 2571 | }, 2572 | ]; 2573 | --------------------------------------------------------------------------------